标题基本就是这个意思:
我的 shell 脚本应该
- 运行命令A,等待完成
- 运行“屏幕”
- 在初始屏幕运行命令B1
- 打开新窗口(通常通过 Cmd-ac)
- 在新窗口中运行命令 B2
- 打开新窗口
- 在新窗口中运行命令 B3
就是这样,无需等待部分(或全部)完成,尽管那样会加分。我该怎么做?
答案1
启动一个screen
名为“mysession”的后台会话:
screen -d -m -S mysession
top
在第一个窗口中运行
screen -S mysession -X exec top
启动另一个窗口,将其命名为“win1”并vmstat 10
在其中运行“
screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10
启动另一个窗口,将其命名为“win2”并iostat 30
在其中运行“
screen -S mysession -X screen -t win2
screen -S mysession -p win2 -X exec iostat 30
要连接并查看会话:
screen -x -S mysession
如果任何程序退出,窗口将不会关闭,因为screen
每个程序中都会启动一个 shell(您可以在需要时使用它)。
- 或者 -如果你只希望每个窗口运行一个命令,或者希望在进程完成后更容易地清理,请不要在每个窗口中运行默认 shell,而只运行命令:
screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0 # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30
screen
将在进程退出时“终止”窗口(可能保持窗口内容完整,见zombie
下文),或者关闭它们:
screen -S mysession -X quit # nuke whole the session
或者
screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill
(这可能会或可能不会终止任何正在运行的进程,screen
但会向每个进程发送 SIGHUP)
如果您想screen
自动关闭窗口,并在所有进程完成后退出,请在创建会话后添加此项(但如果您没有zombie
在您的中设置.screenrc
,这可能是默认的):
screen -S mysession -X zombie
这将取消设置“僵尸”关闭和复活键,然后当每个窗口中的命令终止时,窗口将消失,screen
当最后一个窗口结束时,窗口本身也将关闭。(您可能需要使用defzombie
而不是zombie
,但只有后者对我有用,尽管文档中相反。)