如果我有一個文件
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 秒。