在每个bash创建一个后,在屏幕上运行命令

时间:2015-02-27 21:33:36

标签: linux bash ubuntu gnu-screen

我有以下bash文件,它应该创建一个屏幕,转到一个目录,然后启动一个节点脚本:

screen -S shared     // 1
cd /home/nodejsapp   // 2
node start.js app.js // 3

问题是,在执行1之后,我确实看到屏幕'共享',但是2& 3将在前一个终端上执行,而不是在“共享”屏幕上执行。

如何实现命令2和3将在当前屏幕上执行?

2 个答案:

答案 0 :(得分:3)

您可以创建一个detached屏幕,然​​后向其发送命令。例如:

screen -d -m -S shared
screen -S shared -X -p 0 stuff $'cd /home/nodejsapp\n'
screen -S shared -X -p 0 stuff $'node start.js app.js\n'

如果您之后需要附加到screen会话,则可以再添加一行:

screen -S shared -r

有关详细信息,请参阅screen手册:

答案 1 :(得分:0)

您可以在屏幕中运行“服务器”作为程序,该程序从“tty”程序识别的伪终端读取要执行的命令。例如,正如我写的那样,tty说(屏幕内)

/dev/pts/2

我可以通过

写信给我
date >/dev/pts/2

在服务器端,脚本将在同一设备的循环中逐行读取。 (在其他一些系统中,有不同的名称 伪终端每一侧的设备。)

只需要一个脚本,它首先获取“tty”的输出,将其写入文件(相应的客户端会知道),然后客户端将读取命令(无论是来自键盘还是文件) ,通过pty设备将它们写入服务器。

只需要几个shell脚本就可以了(虽然比这里常见的答案更冗长)。