像这样使用 PROMPT_COMMAND 有何含义?

Fed*_*eli 1 command-line bash environment-variables 23.10

我想在 bash ( ) 提示符之前以反红色插入最后一个命令的返回代码,并在方括号[]( ) 内加上冒号 ( ) 。但是,只有当返回码非零时,即最后一个命令返回错误(一般来说)。:PS1

我正在研究像这样的特殊PROMPT_COMMAND bash环境变量的使用(通过将其放入我的.bash_aliases文件中):

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

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

有没有更有效或推荐的方法,而且也很简单?

cho*_*oba 5

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

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

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

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

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

PROMPT_COMMAND='prompt_command $?'
Run Code Online (Sandbox Code Playgroud)

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