保存bash退出代码

保存bash退出代码,bash,prompt,exit-code,Bash,Prompt,Exit Code,我正在尝试创建一个色彩鲜艳、信息丰富的bash提示符,但我不知道如何保存$?退出代码,以便在if测试之后使用(似乎更改了$?)。 做: 似乎也不起作用。都是美元?测试后,退出代码将为0 我相信这在bash中是可能的,但是如何实现呢 这是迄今为止我的PS1: PS1="\$(if (( \$? == 0 )); then echo \"$GREEN\"; else echo \"$RED\"; fi)$?$NORMAL\u@\h $BLUE\W`if (( $UID == 0 )); then e

我正在尝试创建一个色彩鲜艳、信息丰富的bash提示符,但我不知道如何保存$?退出代码,以便在if测试之后使用(似乎更改了$?)。 做:

似乎也不起作用。都是美元?测试后,退出代码将为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测试将其设置为零

我知道如果分成多行,阅读起来会更容易,但我更喜欢把它作为一行

如果您看到任何其他错误,请也让我知道,因为我只是在这里和那里戳,看看什么是有效的,因为我对我需要在哪里放置反斜杠和我不需要在哪里放置反斜杠感到非常困惑


绿色、蓝色、红色和普通色只是上面定义的颜色,可以让事情变得不那么神秘。

我的提示符是这样构建的:

user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h: \w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch)'
line1="${line1}${user_host_path}${git_branch}"
line2='\! \$ '
print_time='printf "%*s" $((COLUMNS - 9)) " "|sed "s/./˙/g"; date "+ %T"'
color_bold='\[\033[0;1m\]'
color_reset='\[\033[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"

因此,关键是在提示符变量中保存
$?

是,但问题是我需要使用$的值?在一个似乎干扰其值的if测试之后,我在最后一行中做了同样的事情。在你做测试之前先保存它。啊,我明白了。我知道你在做什么,但却不能从中得到任何有用的东西。我尝试了PROMPT_COMMAND=“rc$?;(_rc!=0))&&PS1='$RED$_rc‘| | PS1='$GREEN$_rc‘',但它不显示数字,只显示红色或绿色文本。注释中的代码格式不正确。您是否必须在双引号字符串中保护变量。PROMPT\u COMMAND=“rc\\$?”((\u rc!=0))&&PS1=\“$RED$\u rc\”\124; PS1=\“$GREEN$\u rc\\”。同样的事情。没有号码。而且我只是在提示下做了一个检查,我很确定当$?变化,rc也会变化。可能我的系统配置不正确?编辑:它似乎删除了一些,但它在我的bashrc中。请记住,
(…)
与其他命令一样,不是语法,因此设置了
$?
的值。但是,它的编写方式(如果
$?
为零,则成功;如果不是,则失败)只会在它已经为零时将其设置为零,而在它非零时将其设置为1,因此这并不能真正解释您看到的内容。此外,所有这些都不会对退出代码产生任何影响。您确定在退出之前没有运行任何其他将重置
$?
的命令吗?
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h: \w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && line1="${xterm_title}"
git_branch='$(git_current_branch)'
line1="${line1}${user_host_path}${git_branch}"
line2='\! \$ '
print_time='printf "%*s" $((COLUMNS - 9)) " "|sed "s/./˙/g"; date "+ %T"'
color_bold='\[\033[0;1m\]'
color_reset='\[\033[0m\]'
PROMPT_COMMAND="_rc_=\$?;${print_time};((_rc_!=0)) && PS1='${line1}\n${color_bold}[\$_rc_]${color_reset} ${line2}' || PS1='${line1}\n${line2}'"