gpt4 book ai didi

shell - exit 语句不会中断 unix shell 中的 while 循环

转载 作者:行者123 更新时间:2023-12-05 08:59:09 26 4
gpt4 key购买 nike

每个状态检查 if 语句中的退出语句不会中断 while 循环并真正退出脚本。我可以做些什么来打破循环并使用 $STATUS 代码退出吗?

编辑:我已经更新了我的代码,但它仍然无法正常工作。状态检查语句是否成功中断了循环,但是当我尝试评估 $EXIT_STATUS 时,它始终为空,可能与范围有关。我在这里错过了什么?

  if [ $RESTART -le $STEP ]; then
. tell_step

while read XML_INPUT; do

XML_GDG=`get_full_name $GDG_NAME P`

cp $XML_INPUT $XML_GDG


STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi

add_one_gen $XML_GDG

STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi

done < $XML_STAGE_LIST

echo $EXIT_STATUS
if [ $EXIT_STATUS -ne 0 ]; then
exit $EXIT_STATUS
fi

fi

最佳答案

我遇到了同样的问题:当管道进入 while 循环时,脚本在退出时没有退出。相反,它像“break”应该做的那样工作。

我找到了 2 个解决方案:

a) 在你的 while 循环之后检查 while 循环的返回代码然后退出:

somecommand | while something; do
...
done
# pass the exit code from the while loop
if [ $? != 0 ]
then
# this really exits
exit $?
fi

b) 将 bash 脚本设置为在出现任何错误时退出。将此粘贴到脚本的开头:

set -e

关于shell - exit 语句不会中断 unix shell 中的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com