You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:46:00