说我在文件 test.sh 中有循环脚本,我只想在后台进程完成后运行脚本“running_script2.sh”,我尝试这样做,但它不起作用。
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
wait
echo "running script2 ..."
bash running_script2.sh
它的工作时间:
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
但效率不高
答案1
之间没有语义差异
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
和
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
time
无论条件命令是true
or false
,下面的演示脚本都会运行 3 秒多一点(你可以):
#!/bin/sh -eu
for i in 1 2 3; do
echo "sleep $i" > $i && chmod +x $i
done
if false; then
for i in 1 2 3; do
bash ./$i &
done
else
bash ./1 &
bash ./2 &
bash ./3 &
fi
wait
如果您仍然遇到差异,请发布麦克韦。
答案2
不知道这是否是正确的方法,但我使用 screen 来运行脚本
screen 是一个虚拟终端来在 bg 中运行进程
for id in 1 2 3
do
screen -d -m bash script1.sh $id
done
wait
echo "running script2 ..."
bash script2.sh
screen -d -m 将运行脚本并在脚本完成后关闭屏幕。
使用 screen 时,我无法在标准输出中获取 script1 的输出,因此我使用一个文件来存储 script1 的输出。