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)。

- 或者 -如果您只想在每個視窗執行一個命令,或者希望在進程完成後更輕鬆地進行清理,請不要在每個視窗中執行預設 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,但只有後者對我有用,儘管文檔相反。)

相關內容