我正在尝试创建一个丰富多彩且信息量丰富的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测试将其设置为零的原因。
我知道如果分成多行会更容易阅读,但我更喜欢将其保留为一行。
如果你看到任何其他错误,也请告诉我,因为我只是在这里和那里看看有什么用,因为我对我需要放回波的地方以及我不需要的地方感到很困惑。
绿色,蓝色,红色和正常只是上面定义的颜色,使事情变得不那么神秘。
答案 0 :(得分: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}'"
因此,关键是将$?
保存在提示var。