像这样使用 PROMPT_COMMAND 有何含义?

像这样使用 PROMPT_COMMAND 有何含义?

我想在 bash ( ) 提示符前以反红色插入最后一个命令的返回码,[]并将其放在括号 ( ) 和冒号 ( ) 内。但前提是返回码非零,即最后一个命令返回错误(一般来说)。:PS1

我正在调查特殊PROMPT_COMMAND 狂欢像这样的环境变量(通过将其放在我的.bash_aliases文件中):

PROMPT_COMMAND='( x=$? ; [[ "$x" == "0" ]] || echo -e -n "\e[7;31m[$x]\e[0m:" )'

在此代码中,我需要测试返回代码是否为非零,并echo据此运行命令。因此,我需要先将其存储在环境变量中。为了不覆盖同名的环境变量(x),我在子 shell 中运行整个代码。

有没有更有效或更推荐的简单方法?

答案1

你不需PROMPT_COMMAND要这样做,你只需使用PS1

PS1='$(e=$?; if ((e)) ; then echo "\[\e[7;31m\][$e]\[\e[0m\]:" ; fi)\A \u@\h \w\$ '

命令$(...)替换在子 shell 中运行,因此没有可从外部访问的变量。

需要额外的\[\]来告诉 bash 提示的哪些部分的长度为零。

我使用更复杂的逻辑,需要PROMPT_COMMAND,但我只是设置

PROMPT_COMMAND='prompt_command $?'

prompt_command并在 my 中定义一个.bashrc使用变量的函数local

相关内容