我正在尝试自定义我的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 $?作为命令发送到终端返回有些不同。我已经尝试将工作代码复制到我的工作中,但这也无法解决。此外,当我使用'作为外部引文时,它也有效。“作为第二个。我改变了这一点,因为脚本不接受(否则就是一个角色。
为什么会这样,以及如何解决这个问题?
答案 0 :(得分:3)
您的代码中的问题是您的报价已被破坏:
export PROMPT_COMMAND="
PS1='`
if [ $? -eq 0 ];
then echo '
一般来说它应该可行,试试这个:
PS1='`if [ $? -eq 0 ] ; then echo Y:; else echo N:; fi`
以下是应用代码后的输出:
$ PS1='`if [ $? -eq 0 ] ; then echo Y:; else echo N:; fi`' Y: Y: Y: Y:false N: N: N:true Y: Y:
注意:只需按 ENTER 键,就不会改变提示。
答案 1 :(得分: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\]'