如何在另一个已打开的终端中执行命令?

如何在另一个已打开的终端中执行命令?

是否可以在另一个打开的终端中运行命令?我知道我可以在另一个终端中重定向命令的输出。例如:

ls >/dev/pts/x

其中x可以通过tty在目标终端上运行来获得。但该命令是在当前终端上执行的。那不是我想要的。

为了澄清我的真正目标,我想向每个打开的终端发送命令,以更改颜色主题,而无需重新打开每个终端。

答案1

/dev/pts/N您可以通过简单地写入或 来将颜色/光标转义发送到终端/dev/ttyN;例如,如果/dev/pts/5是 xterm,您可以设置它背景从任何地方变为红色printf %b '\e]11;#ff0000\a' > /dev/pts/5(当然,您需要写入权限/dev/pts/5)。

运行此类命令的可能性很小,可能会与终端中运行的程序发送的其他转义发生严重干扰,但在最坏的情况下,这只会导致终端混乱。

对于在另一个终端/会话中运行程序的更普遍的问题,我认为可能的唯一方法是劫持在该终端中运行的进程,并从其中 fork+exec 该程序。例子:

gdb -p PID -batch -ex 'p system("ls")'

如果程序必须从终端读取数据,那么这就涉及到更多的事情;在执行之前,必须将进程添加到前台进程组。

相关内容