![启动或重新连接分割的 GNU 屏幕,每个窗格运行自己的命令?](https://linux22.com/image/1529981/%E5%90%AF%E5%8A%A8%E6%88%96%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%E5%88%86%E5%89%B2%E7%9A%84%20GNU%20%E5%B1%8F%E5%B9%95%EF%BC%8C%E6%AF%8F%E4%B8%AA%E7%AA%97%E6%A0%BC%E8%BF%90%E8%A1%8C%E8%87%AA%E5%B7%B1%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我希望能够启动一个命令,比如 ./stats.sh,来打开一个屏幕(或者 tmux,或者其他需要的屏幕),如果它已经存在则重新连接,如果不存在则启动,比如在一个窗格中运行“htop”,在另一个窗格中运行“dstat”。
我知道您可以在现有屏幕会话中使用 ctrl+a | 来执行此操作,但我希望能够通过可以运行的脚本完成所有操作。这可能吗?
提出这个问题的另一种方式是:是否可以从命令行启动具有多个窗格的屏幕,每个窗格都运行自己的命令。
答案1
这个问题已经以不同的形式提出,但我将在适当的地方引用它们。
首先附加到现有屏幕或根据需要创建新屏幕, 用这个:
screen -D -R -S namedscreen
或者,您可以测试命名屏幕是否存在,如果不存在则创建一个(分离的):
screen -S name -X select . || screen -dm -S name
对于您想要的其余脚本,您可以创建窗口并向现有屏幕会话发送命令:
screen -dm -S name -t window0
screen -S name -X screen -t window1
screen -S name -X screen -t window2
screen -S name -p 0 -X stuff $'command 1\r'
screen -S name -p 1 -X stuff $'command 2\r'
screen -S name -p 2 -X stuff $'command 3\r'