TyC*_*TyC 2 unix shell while-loop
每个状态检查 if 语句中的 exit 语句不会中断 while 循环并真正退出脚本。我可以做些什么来打破循环并使用 $STATUS 代码退出吗?
编辑:我已经更新了我的代码,但它仍然无法正常工作。状态检查 if 语句成功打破了循环,但当我尝试评估 $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
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题:当管道进入 while 循环时,脚本在退出时没有退出。相反,它的工作方式就像“休息”应该做的那样。
我找到了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
Run Code Online (Sandbox Code Playgroud)
b) 将 bash 脚本设置为在出现任何错误时退出。将其粘贴到脚本的开头:
set -e
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11790 次 |
最近记录: |