我一直在try 自定义我的Bash提示符,使其看起来像

[feralin@localhost ~]$ _

有 colored颜色 的.我设法获得恒定的 colored颜色 (每次看到提示时都是相同的 colored颜色 ),但如果最后一个命令的退出状态为非零,我希望用户名('feralin')显示为红色,而不是绿色.我想到了:

\e[1;33m[$(if [[ $? == 0  ]]; then echo "\e[0;31m"; else echo "\e[0;32m"; fi)\u\e[m@\e[1;34m\h \e[0;35m\W\e[1;33m]$ \e[m

然而,从我的观察来看,当.bashrc运行时,$(if ...; fi)似乎被判断了一次,结果被永远替换.这使得名称始终为绿色,即使最后一个退出代码为非零(如,echo $?).是这样吗?或者只是我的提示出了什么问题?长问题短问题how do I get my prompt to use the last exit code?

推荐答案

当你开始在一个复合体PS1上进行边界时,你可以考虑使用PROMPT_COMMAND.有了它,您可以将其设置为一个函数,并在每个命令之后运行它以生成提示.

您可以在~/.bashrc文件中try 以下操作:

PROMPT_COMMAND=__prompt_command    # Function to generate PS1 after CMDs

__prompt_command() {
    local EXIT="$?"                # This needs to be first
    PS1=""

    local RCol='\[\e[0m\]'

    local Red='\[\e[0;31m\]'
    local Gre='\[\e[0;32m\]'
    local BYel='\[\e[1;33m\]'
    local BBlu='\[\e[1;34m\]'
    local Pur='\[\e[0;35m\]'

    if [ $EXIT != 0 ]; then
        PS1+="${Red}\u${RCol}"        # Add red if exit code non 0
    else
        PS1+="${Gre}\u${RCol}"
    fi

    PS1+="${RCol}@${BBlu}\h ${Pur}\W${BYel}$ ${RCol}"
}

这听起来应该是你想要的.如果你想了解我使用__prompt_command函数所做的所有事情,请查看我的bashrc's sub file.

Linux相关问答推荐

在程序集x86_64中跳转后调用ret时出现分段故障

2023 年如何在现代 Linux 上安装 Firebird SQL 版本 3 或 4?

Linux:用户态线程在执行系统调用时是否有更高的优先级?

awk 使用动态列号

如何使用 gdb 调试堆栈分段错误?

在 Ubuntu 中,如何设置 Tomcat 9 以使用 Java 17?

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

如何使用 shell 脚本将文本文件转换为 JSON 文件

在 Ansible 中使用 JSON 查询过滤数据以从 ansible_fact 中提取数据

如何在初始化脚本中以特定用户身份运行命令?

未找到框架.NETFramework,Version=v4.7.1的参考程序集

如何在 linux ElementaryOS 中修复 Genymotion,但未找到错误CXXABI_1.3.8

低功耗蓝牙:在 linux 中监听通知/指示

Colored shell 脚本输出库

我可以告诉 Linux 不要换出特定进程的内存吗?

如何更改 tmux 会话的起始目录?

Linux如何确定下一个PID?

如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?

如何在 Linux 中将 .so 文件添加到 java.library.path

Linux(Ubuntu)终端-如何查看以前的页面不再可见