我遇到了一个奇怪的问题,即使执行不成功,我的退出状态也总是返回0。
我想在我的提示符上输出退出状态,使用以下代码:
当我运行这个程序时,我得到了以下的输出结果。
显然,倒数第二个命令
编辑于6/20 11:57AM: 问题似乎是
我想在我的提示符上输出退出状态,使用以下代码:
function status() {
echo $?
}
export PS1="\$(status)>"
当我运行这个程序时,我得到了以下的输出结果。
0❯ pwd
/Users/tringuyen
0❯ ad
bash: ad: command not found
0❯ echo $?
127
显然,倒数第二个命令
ad
没有返回一个0状态码。不过控制台却是这样显示的。有人知道这里可能出了什么问题吗?编辑于6/20 11:57AM: 问题似乎是
$?
始终为0
,除非.bashrc
文件本身出现错误,将导致其返回与0
不同的值。
$BASH_VERSION
版本为4.2.20(1)-release
。 - IMSoPPS1="\$?>"
就足够了。 - Grzegorz Żurexport PS1='$(RET=$?; if [ $RET == 0 ]; then echo "\[\033[1;30m\]$RET"; else echo "\[\033[0;31m\]$RET"; fi;) \[\033[1;32m\]\u@\h'
,如果最后的返回状态为非零,则以红色显示,如果为零,则以灰色显示。(将其捕获到$RET
中避免了其他逻辑在我们回显之前覆盖$?
。) - IMSoP$BASH_VERSION
是3.2.48(1)-release
。我正在使用最新的 OS X Mountain Lion 操作系统。 - Tri Nguyen3.2.33(1)-release
上也得到了相同(成功的)结果。这两个都是 Gentoo Linux 系统,所以可能有其他不同之处。另一个可能性是您设置了另一个特殊变量(例如$PS2
或$PROMPT_COMMAND
),它以某种方式覆盖了$?
。 - IMSoP