是否可以在另一个打开的终端中运行命令?我知道我可以在另一个终端中重定向命令的输出。例如:
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")'
如果程序必须从终端读取数据,那么这就涉及到更多的事情;在执行之前,必须将进程添加到前台进程组。