我正在尝试创建一个丰富多彩且信息丰富的bash提示,但我不知道如何保存$?退出代码,以便稍后在if测试后使用(这似乎更改了$?)。操作:
exit_code=$?
PS1="$(if (( $? == 0 )); then echo "$GREEN"; else echo "$RED"; fi)$exit_code $NORMALu@h $BLUEW`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)$?$NORMALu@h $BLUEW`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='[ 33[0;1m]'
color_reset='[ 33[0m]'
PROMPT_COMMAND="_rc_=$?;${print_time};((_rc_!=0)) && PS1='${line1}n${color_bold}[$_rc_]${color_reset} ${line2}' || PS1='${line1}n${line2}'"
因此,关键是将$?
保存在提示变量中