Bash中如何避免echo命令修改命令执行的退出码?
解决Bash退出码被echo覆盖的问题
你的问题出在$?的特性上:它始终保存上一条执行命令的退出状态码。当你执行完dr $path后,$?是该命令的退出码,但紧接着的echo命令执行成功(退出码0),会直接覆盖掉原来的$?值,导致后续的if判断用的是echo的退出码,而非你需要的dr命令的退出码。
解决办法很简单:把dr命令的退出码提前保存到一个自定义变量里,后续所有判断都使用这个变量,就不会被其他命令覆盖了。修改后的脚本如下:
read -p "Path: " path dr $path 2> /dev/null # 把退出码保存到变量里 exit_code=$? echo "Command output level: $exit_code" if [ $exit_code = 0 ] then echo "Command success" elif [ $exit_code = 127 ] then echo "Command not found" else echo "Command failed or not found" fi
这样不管后续执行多少个echo或者其他命令,exit_code变量里始终存储的是dr命令的原始退出码,就能正确触发对应的判断分支了。
内容的提问来源于stack exchange,提问作者Txni.26
相关产品推荐
相关产品推荐

