如何以正確的順序使用 docker 容器執行 bash 腳本?

如何以正確的順序使用 docker 容器執行 bash 腳本?

我有一個主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 秒。

您的問題是您想要的容器在移動到下一個腳本之前停止運行?

相關內容