2013-07-15 159 views
0

我無法通過shell腳本並行執行2個腳本。無法並行運行多個腳本

我有3個腳本:script1.sh,script2.sh和installpackages.sh。

我的要求是script1.sh和script2.sh必須在後臺並行運行,在完成script1.sh和script2.sh之後,應執行installpackages.sh。

selid1t601.xayybol.74> vi script.sh 
exec script1.sh & 
exec script2.sh & 

installpackages.sh 

請問你能建議我怎麼能並行執行script1.sh和script2.sh?

回答

1

由於您已經在後臺執行腳本,所以這些腳本實際上並行運行。唯一需要的是wait以確保在執行最後一步之前執行腳本。你需要說:

exec script1.sh & 
exec script2.sh & 
wait 
installpackages.sh 

manual

等待

wait [jobspec or pid ...] 

等待,直到每個進程ID PID或工作 規範中指定的子進程JOBSPEC退出並返回最後的 命令等待的退出狀態對。如果給出了工作規範,則等待作業 中的所有進程。如果沒有給出參數,則等待所有當前活動的子進程,返回狀態爲零。如果沒有 JOBSPEC也不PID指定外殼的活動的子過程中, 返回狀態是127

1

不做exec在這種情況下。這會使用啓動的程序替換當前進程。只是運行他們像

bash script1.sh & 
bash script2.sh & 

./script1.sh & 
./script2.sh & 

,並把wait身後,devnull說。

+0

使用'exec'可以減少所需的進程數量。 './script1.sh&'首先分出一個新的shell,然後這個shell派出一個'script1.sh'進程來運行''exec ./script1.sh&'分支一個新的shell,然後這個shell被替換*通過'script1.sh'的過程。 – chepner