2013-07-24 66 views
0

因此,在我的腳本中,我想在後臺啓動兩個進程,在此之後我想等待兩個進程完成,並且我想要在變量中獲取進程的標準輸出。Bash腳本 - 啓動兩個後臺進程,等待兩個完成並在變量中獲得輸出

要在後臺運行,我可以用
command &

要得到的結果在一個變量,我可以反引號內運行命令。

但是當我在反引號中做command &時,整個事情就變成了阻塞。

那麼,我該如何解決我的問題?

回答

3

後臺運行的命令在子進程中運行,並且子進程無法修改父進程中的參數(變量)。所以從技術上講,你所尋找的是不可能的。

但是,您可以將孩子的stdout(和,如果您願意,stderr)存儲在文件中;你只需要確保給文件一個獨特的名字。 (例如,請參閱man mktemp)。在wait後面的進程完成後,可以將臨時文件讀入參數中,然後刪除該文件。

tmp1=$(mktemp) 
tmp2=$(mktemp) 
command1 > "$tmp1" & 
command2 > "$tmp2" & 
wait 
OUTPUT1=$(< "$tmp1") && rm "$tmp1" 
OUTPUT2=$(< "$tmp2") && rm "$tmp2" 
相關問題