和標題說的差不多:
我的 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
,但只有後者對我有用,儘管文檔相反。)