我有一个主 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 秒。
您的问题是您想要的容器在移动到下一个脚本之前停止运行?