3

我正在尝试自定义我的 bash 提示符。如果我输入一个不存在的命令,或者由于其他原因失败,我希望它改变颜色。我对 bash 脚本的编码相当陌生,所以我查看了其他一些脚本以便获得一些帮助,但有些东西不起作用。这是我的代码:

export PROMPT_COMMAND="
    PS1='`
        if [ $? -eq 0 ];
            then echo '
                \[\033[00;32m\]┌─\[\033[00;35m\]\u\[\033[01;32m\]@
                \[\033[00;35m\]\h\n\[\033[00;32m\]└─\[\033[01;32m\]
                (\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$';
         else echo '
                \[\033[00;31m\]┌─\[\033[00;35m\]\u\[\033[01;31m\]@
                \[\033[00;35m\]\h\n\[\033[00;31m\]└─\[\033[01;31m\]
                (\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$';
         fi`\[\033[0m\]'"

我在实际代码中没有任何换行符,因为这会对 PS1 造成混乱,我只是添加了它们以使代码更易于阅读。

所以,我想比较一下退出状态,$? , 为0。出于某种原因,变量 $? 在脚本中根本没有改变。它只是保持0,因此第一个条件始终为真,即使我发出错误的命令也是如此。我试过添加echo $? 到 if-case 之前的代码,这总是返回 0,即使发出echo $? 作为终端的命令返回不同的东西。我试过将工作代码复制到我的,但这也不能解决它。此外,当我使用'作为外部引用和"作为第二个引用时,它起作用了。我改变了这个,因为脚本不会接受(否则作为一个字符。

任何想法为什么会这样以及如何解决它?

4

2 回答 2

4

您的代码中的问题是您的报价被破坏了:

export PROMPT_COMMAND="
PS1='`
    if [ $? -eq 0 ];
        then echo '

通常它应该工作,试试这个:

PS1='`if [ $? -eq 0 ] ; then echo Y:; else echo N:; fi`

这是应用代码后的输出:

$ PS1='`如果 [ $? -eq 0 ] ; 然后回显 Y:; 否则回显 N:; 菲`'
是的:
是的:
是的:
是:假
纽:
纽:
N:真
是的:
是的:

注意:只需按ENTER键,不会更改提示。

于 2013-03-13T12:54:26.623 回答
0

正如 H.-Dirk Schmitt 的出色回答的后续行动一样,这对我有用(我不会费心解释代码,这已经比我做得更好了);

PS1='`
  if [ $? -eq 0 ];
    then echo -n "\[\033\[00;35m\]\u\[\033\[01;32m\]@\[\033\[00;35m\]\h\[\033\[00;32m\](\[\033\[01;35m\]\W\[\033\[01;32m\])\[\033\[00;32m\]\$";
    else echo -n "\[\033\[00;35m\]\u\[\033\[01;31m\]@\[\033\[00;35m\]\h\[\033\[01;31m\](\[\033\[35m\]\W\[\033\[31m\])\[\033\[00;31m\]\$";
  fi`\[\033\[0m\]'

重击颜色

于 2013-10-01T20:45:54.933 回答