2017-02-13 16 views
-1

我有這樣的bash腳本:wait -n;是不是等待所有子shell完成

#!/usr/bin/env bash 


DIRN=$(dirname "$0") 

OUTPUT_PATH=${PROJECT_ROOT:-$PWD}/npm-install-output.log 

(cd $(dirname "$0")/one && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) & 
(cd $(dirname "$0")/two && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) & 
(cd $(dirname "$0")/three && echo $PWD && rm -rf node_modules ; npm --loglevel=warn --progress=false install) & 

wait -n; echo "EXIT CODE => $?" 

EXIT=$? 

echo " all done with parallel installs " 
echo " => bash exit code for script '$(dirname "$0")/$(basename "$0")' => $EXIT" && 
exit ${EXIT} 

從我的日誌輸出,似乎很明顯,次外層之一wait -n呼叫後運行。

我該如何使用等待或其他構造來等待所有子殼體完成?

+0

wait'後'寬鬆'-n'。順便說一句,你的'EXIT = $?'是可疑的,它會得到前面'echo'語句的退出碼。 – cdarke

+0

@cdarke是的,這是真的 –

回答

5

help wait是關於很清楚:

如果-n選項提供,等待下一個作業終止並 返回它的退出狀態。

使用wait,而不是wait -n


如果你有興趣在所有三個返回值使用:

for i in 1 2 3 ; do 
    wait -n 
    echo "exit code $?" 
done 
+0

謝謝,是的,我在想,但等待-n的定義並沒有說明它只是等待下一份工作。理論上可以等待所有的工作。 –

+1

?在這種情況下,幫助是100%清楚的 – hek2mgl

+0

這對我來說並不清楚,而且你不能與此爭論:)也許我只是愚蠢 –