bash退出状态始终为0

bash退出状态始终为0,bash,command-prompt,Bash,Command Prompt,我遇到了一个奇怪的问题,退出状态总是返回0,即使它没有成功执行 我想在提示符下用以下代码输出退出状态: function status() { echo $? } export PS1="\$(status)>" 当我运行它时,我得到以下输出 0❯ pwd /Users/tringuyen 0❯ ad bash: ad: command not found 0❯ echo $? 127 显然,最后一个命令ad没有返回0状态代码。然而,这是我从提示中得到的 有人知道这里发

我遇到了一个奇怪的问题,退出状态总是返回0,即使它没有成功执行

我想在提示符下用以下代码输出退出状态:

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版本有效吗

export PS1="\$?>"

我在$PS1中使用以下内容:

 PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]\$? O_O\[\e[0m\]; fi\`"

Src:

我也有类似的问题,但我的函数看起来不同。问题是,我在VAR=$之后缺少分号“;”

旧的:

无论发生什么,总是返回零

新的:

现在返回正确的返回值

export PS1="\$(status)>"

编写的代码对我来说似乎很好。我的
PS1=“\$?>”
版本是
4.2.20(1)-release
。对我来说,这样做就足够了。出于兴趣,我的提示定义(部分)是
export PS1='$(RET=$?;如果[$RET==0];那么echo“\[\033[1;30m\]$RET”;否则echo“\[\033[0;31m\]$RET”;fi;[\033[1;32m]\u@\h'
,如果最后一次返回状态为非零,则以红色显示,如果为零,则以灰色显示。(捕获到
$RET
中,避免了在我们回显之前写入
$?
的其他逻辑。)@IMSoP my
$BASH_VERSION
3.2.48(1)-发行版
。我正在使用最新的OS X Mountain Lion。嗯,这不仅仅是一个版本-我在
3.2.33(1)-发行版
上获得了相同的(成功的)结果。这两个都是Gentoo Linux框,所以可能还有其他不同之处。另一个可能是您有另一个特殊的变量集(
$PS2
$PROMPT\u命令
可能?)不知何故写得太多了
$?
function status() {
   VAR=$?;
   echo VAR;
}
export PS1="\$(status)>"