我想在bash中编写一个循环,它执行直到某个命令停止失败(返回非零退出代码),如下所示:
while ! my_command; do
# do something
done
Run Code Online (Sandbox Code Playgroud)
但是在这个循环中我需要检查my_command返回的退出代码,所以我尝试了这个:
while ! my_command; do
if [ $? -eq 5 ]; then
echo "Error was 5"
else
echo "Error was not 5"
fi
# potentially, other code follows...
done
Run Code Online (Sandbox Code Playgroud)
但随后特殊变量?变为0循环体内.明显的解决方案是:
while true; do
my_command
EC=$?
if [ $EC -eq 0 ]; then
break
fi
some_code_dependent_on_exit_code $EC
done
Run Code Online (Sandbox Code Playgroud)
如何检查my_command循环体内的(在循环头中调用)的退出代码,而不使用while true具有中断条件的循环重写此示例,如上所示?