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 中运行整个代码。
有没有更有效或推荐的方法,而且也很简单?
你不需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。