我有这个 bash 脚本:
echo "x" & X=$!
echo "y" & Y=$!
( echo "z" ; exit 0; ) & Z=$! # this line
wait ${X} && echo "X $?"
wait ${Y} && echo "Y $?"
wait ${Z} && echo "Z $?"
当我将 exit 0 更改为 exit 1 时,脚本的最后一个 echo 语句不会执行。例如,以下是退出代码为 0 时的输出:
x
X 0
z
y
Y 0
Z 0
但是当我将其更改为1时:
x
y
X 0
z
Y 0
我假设括号中的内容应该在子 shell 中执行。有人知道为什么我的代码会这样做吗?
答案1
如记录在help wait
:
返回ID的状态
因此,如果进程以 退出1
,则 wait 返回1
并&&
通过不执行第二个命令来短路。如果无论第一个命令是否成功都想打印该值,请尝试;
而不是。&&