【问题标题】:Run commands in screen after creating one per bash在每个 bash 创建一个后在屏幕中运行命令
【发布时间】:2015-02-27 21:33:36
【问题描述】:
我有以下 bash 文件,它应该创建一个屏幕,转到一个目录,然后启动一个节点脚本:
screen -S shared // 1
cd /home/nodejsapp // 2
node start.js app.js // 3
问题是,执行 1 后,我确实看到了“共享”屏幕,但是 2 & 3 会在之前的终端上执行,而不是在“共享”屏幕上。
如何实现命令 2 和 3 将在当前屏幕上执行?
【问题讨论】:
标签:
linux
bash
ubuntu
gnu-screen
【解决方案1】:
您可以创建一个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的手册:
【解决方案2】:
您可以将“服务器”作为屏幕中的程序运行,它从“tty”程序识别的伪终端读取要执行的命令。例如,当我写这篇文章时,tty 说(屏幕内)
/dev/pts/2
我可以给它写信
date >/dev/pts/2
在服务器端,脚本将从同一设备循环读取。 (在其他一些系统上,有不同的名称
伪终端每一侧的设备)。
只需要一个脚本,该脚本首先获取“tty”的输出,将其写入文件(相应的客户端会知道),然后客户端会读取命令(无论是从键盘还是文件) , 通过 pty 设备将它们写入服务器。
只需几个 shell 脚本就可以做到(虽然比这里通常的答案要长一点)。