Shell 脚本:运行屏幕,打开多个屏幕并在每个屏幕中运行命令

Shell 脚本:运行屏幕,打开多个屏幕并在每个屏幕中运行命令

标题基本就是这个意思:

我的 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,但只有后者对我有用,尽管文档中相反。)

相关内容