我有以下bash文件,它应该创建一个屏幕,转到一个目录,然后启动一个节点脚本:
screen -S shared // 1
cd /home/nodejsapp // 2
node start.js app.js // 3
问题是,在执行1之后,我确实看到屏幕'共享',但是2& 3将在前一个终端上执行,而不是在“共享”屏幕上执行。
如何实现命令2和3将在当前屏幕上执行?
答案 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脚本就可以了(虽然比这里常见的答案更冗长)。