我目前在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()
值,使其不会继续重复提示中的值?
非常感谢,史蒂夫。
答案 0 :(得分:3)
问题是,如果您不发出另一个命令,$?
不会改变。因此,当您的提示被重新评估时,它正确地发出127
。除了在提示符处手动输入另一个命令外,没有真正的解决方法。
编辑:实际上我说谎了,总有办法存储状态,所以你可以存储$?
的值并检查它是否已经更改,如果有,则清除提示。但是由于你在子shell中,你的选择非常有限:你必须使用一个文件或同样脏的东西来存储价值。