【发布时间】:2014-02-26 13:14:42
【问题描述】:
我正在尝试创建一个色彩丰富且内容丰富的 bash 提示符,但我不知道如何保存 $? if 测试后的退出代码供以后使用(这似乎改变了 $?)。 正在做:
exit_code=$?
PS1="\$(if (( \$? == 0 )); then echo \"$GREEN\"; else echo \"$RED\"; fi)$exit_code $NORMAL\u@\h $BLUE\W`if (( $UID == 0 )); then echo \"$RED#\" else echo \"$GREEN$\"; fi`$NORMAL "
似乎也不起作用。两个美元?测试后exit_code为0。
我确信这在 bash 中是可能的,但是如何实现呢?
到目前为止,这是我的 PS1:
PS1="\$(if (( \$? == 0 )); then echo \"$GREEN\"; else echo \"$RED\"; fi)$?$NORMAL\u@\h $BLUE\W`if (( $UID == 0 )); then echo \"$RED#\" else echo \"$GREEN$\"; fi`$NORMAL "
还有 $?即使颜色根据退出代码在红色和绿色之间变化,也只是零,这就是让我觉得是 if 测试将其设置为零的原因。
我知道如果分成多行会更容易阅读,但我更喜欢将其保留为单行。
如果您发现任何其他错误,也请告诉我,因为我只是在这里和那里看看什么有效,因为我对需要在哪里放置反斜杠以及在哪里不需要放置反斜杠感到很困惑。
GREEN、BLUE、RED 和 NORMAL 只是上面定义的颜色,目的是让事情变得不那么神秘。
【问题讨论】:
-
请记住,
(( ... ))是与任何其他命令一样的命令,而不是语法,因此设置了$?的值。但是,它的写入方式(如果$?为零则成功,否则失败)只会在它已经为零时将其设置为零,并且在它非零时设置为1,因此不会真正解释你所看到的。此外,这些都不会对exit_code产生任何影响。您确定没有在exit_code=$?之前运行任何其他会重置$?的命令吗?