【问题标题】:Change last character's color of PS1v promt based on exit status of previous command根据上一个命令的退出状态更改 PS1v 提示的最后一个字符的颜色
【发布时间】:2020-09-08 13:40:19
【问题描述】:

我已经自定义了我的 .bashrc 设置,类似于来自 Clear Linux 的默认 PS1 设置。 我的文件内容如下:

EXIT="$?"
BLUE="\[\e[38;5;39m\]"
RED="\[\e[31m\]"
ORANGE="\[\e[38;5;208m\]"
WHITE="\[\e[0m\]"
    if [ "$EXIT" = "0" ]; then
          endchar="${BLUE}\\$""$WHITE"
    else
          endchar="${RED}\\$""$WHITE"
    fi
    
    if [ "$UID" = "0" ]; then
          username="${RED}\u${WHITE}"
    else
          username="${BLUE}\u${WHITE}"
    fi  

host="${ORANGE}\H${WHITE}"
dir="${BLUE}\w${WHITE}"
PS1="${username}@${host} ${dir} ${endchar} "

该文件的来源在登录或打开新终端窗口时没有错误,但有一个例外: 结果 PS1 字符串中的最后一个字符永远保持蓝色,尽管我在终端上输入错误。

我的设置的预期行为是,当上一个命令的退出状态大于 0 时,提示符的最后一个字符 $ 变为红色。

有什么建议吗? 提前致谢

【问题讨论】:

标签: bash prompt ps1


【解决方案1】:

将此颜色代码添加到末尾

DEF='\e[0m' #Default color and effects
PS1="${username}@${host} ${dir} ${endchar}$DEF "

看看here

【讨论】:

  • OP 中的第一行:EXIT="$?" -- 这将导致它根本不起作用。
【解决方案2】:

再举一个例子:

function _ps1_command()
{
    local rcode=$?

    if (( rcode )); then
        g_prompt_color=$'\e[1;31m'
    else
        g_prompt_color=$'\e[0m'
    fi
}
PROMPT_COMMAND=_ps1_command
PS1='[\w] \[$g_prompt_color\]\$\[\e[0m\] '

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2021-01-13
    • 1970-01-01
    • 2013-08-14
    相关资源
    最近更新 更多