somefile
包含这个:
aaa
bbb
ccc
这是可以在完成所有迭代之前退出的子 shell。在我的特定情况下是,while
但也可能for
是until
:
cat "somefile" | while read -r line
do
echo "$line"
if [ "$line" = "bbb" ]
then
exit 2
fi
done
exit_code="$?"
if [ "$exit_code" -ne 0 ]
then
exit
fi
echo "I'm here"
问题是最后一行I'm here
被打印出来了。我的目的是完全退出到终端。但是我不确定这是否正确并且是否适用于所有 shell。这甚至是 POSIX 吗?有没有提到这在 POSIX 中是如何工作的?
我询问过几个人工智能引擎,每个引擎都有不同的答案:
- 副驾驶:表示 exit_code 将始终为 0,因为这是 cat 的退出代码。可以是任何其他命令。
- ChatGPT:表示 exit_code 将是退出后的数字,比如这里的 2,因为它会传播。
- Gemini:表示 exit_code 将始终为 0,因为 $? 获取最后一条指令的退出代码,该代码
done
始终为 0。
有什么帮助吗?我尝试过在 bash 中检测退出代码,但不确定这是否是某些特定的 bash 配置(例如 pipefail 或它在任何 shell 中工作的方式(例如在 UNIX 中也是如此)。