Bash

如何在終端視窗中同時執行多個 Bash 腳本?

  • May 1, 2020

我需要同時執行多個 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.

引用自:https://unix.stackexchange.com/questions/582092