我希望在bash脚本中并行运行多个命令,但如果任何一个命令失败(返回非零退出码),脚本的退出码必须是非零的。
我尝试使用sem
(https://www.gnu.org/software/parallel/sem.html):
cat >script.sh <<EOF
sem -j+0 "sleep 2; echo 1"
sem -j+0 "sleep 4; exit 1; echo 2"
sem -j+0 "sleep 6; echo 3"
sem --wait
EOF
bash script.sh; echo $?
并将此进程后台运行:
cat >script.sh <<EOF
{sleep 2; echo 1} &
{sleep 4; exit 1; echo 2} &
{sleep 6; echo 3} &
wait
EOF
bash script.sh; echo $?
在这两种情况下,总体的退出码始终为0。
有什么想法吗?
wait
命令的退出代码。从wait
手册页中的“EXIT STATUS”部分可知:“0表示调用wait
实用程序时没有操作数,并且由调用shell所知的所有进程ID都已终止。” - Dr Clawsem
是一个符号链接到 GNU Parallel,使其像跨进程共享的信号量一样运行的工具。 - Mark Setchell