gpt4 book ai didi

bash - 与退出状态的比较不起作用

转载 作者:行者123 更新时间:2023-11-29 09:26:31 25 4
gpt4 key购买 nike

我正在尝试自定义我的 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 $? 作为终端返回的命令也是如此有些不同。我试过将工作代码复制到我的代码中,但这也没有解决问题。此外,当我使用 ' 作为外部引用和 " 作为第二个引用时,它起作用了。我改变了这个,因为脚本不接受 (否则作为字符。

知道这是为什么以及我该如何解决它吗?

最佳答案

您的代码中的问题是您的引文被破坏了:

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:falseN:N:N:trueY:Y:

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

关于bash - 与退出状态的比较不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15384941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com