執行一系列相互獨立的命令

執行一系列相互獨立的命令

如果我有一個文件

cmd1

cmd2

cmd3

我想彼此獨立地運行它們,並且無論它是否輸出退出狀態都獨立(這意味著不要期望結束,只是繼續啟動進程,這可能會失敗或不會。我知道這;將運行下一個命令,但事實並非如此,因為它會等到上一個指令失敗或成功為止。

它就像類似的東西sleep 60m;然後播放音樂,響鈴,運行瀏覽器,但顯然,沒有辦法等到音樂播放響鈴,然後再運行瀏覽器。它必須立即發生。

添加:例如,如何

從文件中讀取行,為每行打開一個終端並運行它?

答案1

只需在每行末尾添加一個 & 符號即可將所有命令分叉到後台。

cmd1 &
cmd2 &
cmd3 &

例子

$ more at_once.bash 
#!/bin/bash

echo "1" && sleep 10 &
echo "2" && sleep 10 &
echo "3" && sleep 10 &
pgrep -a sleep

現在當我們執行這個腳本時:

$ ./at_once.bash 
1
3
2
7533 sleep 10
7535 sleep 10
7536 sleep 10

您甚至可以看到任務由於其後台性質而無序運行,第三個命令在第二個命令之前被回顯。顯示pgrep sleep所有 3 個後台命令同時運行。

筆記:我使用該符號echo "X" && sleep 10只是為了表明命令正在後台運行。此符號與後臺本身無關,尾隨&是將命令「放入」sleep 10後台的內容。

&如果您想在單一命令列中執行此操作,也可以用作分隔符號:

$ sleep 10 & sleep 10 & sleep 10 &
[1] 7731
[2] 7732
[3] 7733

檢查這一班輪:

$ pgrep -a sleep
7731 sleep 10
7732 sleep 10
7733 sleep 10

我們再次看到它們全部同時運行。如果您要使用分號:

$ sleep 10 ; sleep 10 ; sleep 10

這些sleep 10命令串行運行需要 30 秒才能完成,而並行運行則只需 10 秒。

相關內容