6

我目前在 bash 中有一个提示,它调用一个函数来输出最后一个命令运行的返回码(如果非零):

exit_code_prompt()
{
    local exit_code=$?
    if [ $exit_code -ne 0 ]
    then
        tput setaf 1
        printf "%s" $exit_code
        tput sgr0
    fi
}


PS1='$(exit_code_prompt)\$ '

这工作得很好,除了$?除非运行另一个命令否则不会重置:

$ echo "works"
works
$ command_not_found
bash: command_not_found: command not found
127$ 
127$ 
127$ 
127$ echo "works"
works
$

$?是否可以在第一次运行时重置/取消设置父 shell 的值,以便exit_code_prompt()它不会继续重复提示中的值?

非常感谢,史蒂夫。

4

1 回答 1

3

问题是,如果您不发出另一个命令,$?则不会改变。因此,当您的提示被重新评估时,它会正确发出127. 除了在提示符下手动键入另一个命令外,没有真正的解决方法。

编辑:其实我撒谎了,总有办法存储状态,所以你可以存储的值$?并检查它是否改变了,如果有则清除提示。但是由于您在子外壳中,因此您的选择非常有限:您必须使用文件或同样脏的东西来存储值。

于 2012-08-08T17:02:10.033 回答