0
因此,在我的腳本中,我想在後臺啓動兩個進程,在此之後我想等待兩個進程完成,並且我想要在變量中獲取進程的標準輸出。Bash腳本 - 啓動兩個後臺進程,等待兩個完成並在變量中獲得輸出
要在後臺運行,我可以用
command &
要得到的結果在一個變量,我可以反引號內運行命令。
但是當我在反引號中做command &
時,整個事情就變成了阻塞。
那麼,我該如何解決我的問題?
因此,在我的腳本中,我想在後臺啓動兩個進程,在此之後我想等待兩個進程完成,並且我想要在變量中獲取進程的標準輸出。Bash腳本 - 啓動兩個後臺進程,等待兩個完成並在變量中獲得輸出
要在後臺運行,我可以用
command &
要得到的結果在一個變量,我可以反引號內運行命令。
但是當我在反引號中做command &
時,整個事情就變成了阻塞。
那麼,我該如何解決我的問題?
後臺運行的命令在子進程中運行,並且子進程無法修改父進程中的參數(變量)。所以從技術上講,你所尋找的是不可能的。
但是,您可以將孩子的stdout
(和,如果您願意,stderr
)存儲在文件中;你只需要確保給文件一個獨特的名字。 (例如,請參閱man mktemp
)。在wait
後面的進程完成後,可以將臨時文件讀入參數中,然後刪除該文件。
tmp1=$(mktemp)
tmp2=$(mktemp)
command1 > "$tmp1" &
command2 > "$tmp2" &
wait
OUTPUT1=$(< "$tmp1") && rm "$tmp1"
OUTPUT2=$(< "$tmp2") && rm "$tmp2"