我如何设置$?在PS1调用的函数中?

Ste*_*tam 6 bash command-prompt .bash-profile ps1

我目前在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)\$ '
Run Code Online (Sandbox Code Playgroud)

除非$?不重置,除非运行另一个命令,否则这样可以很好地工作:

$ echo "works"
works
$ command_not_found
bash: command_not_found: command not found
127$ 
127$ 
127$ 
127$ echo "works"
works
$
Run Code Online (Sandbox Code Playgroud)

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

非常感谢,史蒂夫.

koj*_*iro 3

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

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

  • 由于无法改变 bash 运行提示的方式,范围规则似乎确实阻止了我接触任何东西 --- 非常感谢您的帮助。这一定是唯一一次有人想要使用另一种语言的 PHP 功能:-)。 (2认同)