Bash
如何在終端視窗中同時執行多個 Bash 腳本?
我需要同時執行多個 Bash 腳本(準確地說是具有不同變數的相同腳本)。為了控制選項卡的數量,我希望將它們分組到一個終端選項卡中。
腳本定期輸出,我檢查是否有任何問題。
如果我將它們發送到後台
./script.sh 1 & ./script.sh 2 & ./script.sh 3 & ./script.sh 4
我會失去對他們的控制。例如,我通過
Ctrl
+終止腳本C
。使用上面的程式碼,我應該pid
為每個程序找到殺死它們的方法。請注意,上面的程式碼是我的主腳本(比如說
./all_scripts.sh
)的內容,而不是要在終端中輸入的命令。有沒有辦法在同一終端中執行腳本,同時將它們視為單個輸出腳本?
在測試了不同的方法和程序後,我發現實用的解決方案是GNU Parallel。我發布此答案,因為它可能對其他人有所幫助。
GNU Parallel
不是為這項任務而建造的,但完美地達到了目的。如果將腳本執行為
parallel -u ::: './script.sh 1' './script.sh 2' #(and so forth)
所有腳本將並行執行。
(
-u
)--ungroup
標誌stdout
在執行腳本時將腳本輸出發送到。
Ctrl
+C
殺死parallel
工作,隨後殺死所有正在執行的腳本。
你不會失去對它們的控制。您將它們(最後一個除外)發送到後台。
如果您執行您指定的命令鏈,則呼叫
./script.sh 4
將在前台執行,而其他腳本將在後台執行。輸入將被發送到前台腳本。要暫停前台腳本,請按Ctrl``Z
。要將掛起的腳本發送到後台以繼續執行,請使用該bg
命令。要查看您擁有的腳本(或更準確地說是作業)以及它們所處的狀態,請使用
jobs
.要將特定工作放在首位,請使用
fg
及其編號(如上述 所報告的jobs
)和%
前綴,例如fg %2
。要終止特定作業,您可以將其帶到前台fg
並正常終止,或者您也可以kill
,例如kill -TERM %2
.