当前位置: 首页 > 面试题库 >

带有最后退出代码的Bash提示

洪雨石
2023-03-14
问题内容

因此,我一直在尝试通过bash提示进行自定义,以使其看起来像

[feralin@localhost ~]$ _

颜色。我设法获得了恒定的颜色(每次看到提示时,颜色都是相同的),但是如果最后一个命令的退出状态为非零,我希望用户名(“
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

但是,从我的观察来看,运行$(if ...; fi)时似乎只对一次求值.bashrc,然后永远替换结果。即使最后一个退出代码为非零(如),这也使名称始终为绿色echo $?。这是怎么回事吗?还是提示出现其他问题?长话短说, 如何提示我使用最后一个退出代码?


问题答案:

当您开始在复杂的PS1上边框时,可以考虑使用PROMPT_COMMAND
这样,您将其设置为一个函数,它将在每个命令之后运行以生成提示。

您可以尝试以下方法 ~/.bashrc

PROMPT_COMMAND=__prompt_command # Func to gen 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}"
}

这应该按照您想要的方式进行。如果要查看我使用函数执行的所有操作,请查看我的bashrc的子文件__prompt_command



 类似资料:
  • 让我们假设你要复制一个目录。你可以通过键入cp -vR /old/dir/path /new/dir/path来执行此操作。发出此命令后,你可能想知道如何进行。目录是否被复制?还是出现了一些错误,因为目标目录空间不足,或其他出现错误的东西? 为了理解它是如何工作的,你必须了解两个程序如何通信。我们先这样说,bash 只是另一个程序,所以一般来说,当你发出上述的cp命令时,一个程序(bash,它是父

  • 我该如何做到这一点?谢了!

  • 问题内容: 我为提出这样一个愚蠢的问题而道歉,但是我的linux服务器陷入了“ bash”模式。当我通过终端登录时,命令行如下所示: 因此,我无法执行其他命令。如果输入“ exit”,它将关闭终端窗口。如何退出此bash模式,以便可以输入命令? 问题答案: Bash是命令行解释器。这是在Linux系统上运行命令的一种方法。 您是在说这不允许您运行输入的命令吗?使用bash运行命令时会给出什么错误或

  • 问题内容: 每当我运行任何代码时,控制台始终以结尾。 例如,如果我只打印(“ hellow”): 有什么办法可以使输出“成螺旋形”? 问题答案: 您知道它不是输出的一部分吗?这只是IDE控制台提供的其他信息。实际程序只是按预期输出。 这样说意味着一切正常。如果程序中发生异常,否则将使用非零参数生成,IDE将通知您有关此信息,这是有用的调试信息。 在生产中,您不应该从IDE运行Python程序,因此

  • 它输出,这让我认为变量赋值不会扫过上一个错误代码,也不会产生新的错误代码。但当我尝试这个的时候: 它输出,显然这就是返回的内容,它重写返回的。 我想知道为什么会发生这种情况,变量赋值有什么特殊性,不同于其他正常命令吗?或者仅仅是因为被认为是一个命令,只有命令替换部分才有意义? --更新-- 谢谢大家,从答案和评论中,我得到了这样一个观点:“当您使用命令替换分配变量时,退出状态就是命令的状态。”(作