
我有一個主bash 腳本,它執行幾個較小的bash 腳本(每個較小的腳本運行一個docker 容器),但我希望第二個腳本僅在第一個腳本完成執行後運行,依此類推。也就是說,我希望每個腳本的進程不要同時執行。例子:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
網路上的建議對我不起作用。我嘗試使用以下命令來取得 1st_script 的 PID:
1st_Script & echo $!
然後使用ps -p <PID> || <2nd_script>
但是雖然<1st_Script> & echo $!
給出了 PID,但當我檢查進程是否存在時卻ps -p <PID>
什麼也沒有。我知道 1st_script 正在運行,因為它運行的 docker 容器以docker ps
.所以它的過程也應該列出ps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
不是一個選項,因為我有很多腳本並且不可讀
答案1
續行可以大幅提升可讀性:
script1 && script2 && script3 && scriptn
相對
script1 \
&& script2 \
&& script3 \
&& scriptn
但我無法重現您的問題。是什麼讓您覺得您的腳本是不是按順序運行?
我製作了兩個測試腳本,每個腳本都包含
echo hello
sleep 15s
然後是一個只包含
./script1
./script2
並測量等待時間time
以獲得以下輸出
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
如果腳本同時運行,總時間將少於 30 秒。
您的問題是您想要的容器在移動到下一個腳本之前停止運行?