我想在 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
。