【发布时间】:2020-04-14 09:45:13
【问题描述】:
这是在 Ubuntu 19.10 机器上设置提示的 .bashrc 文件的一部分:
# Terminal tab name in gnome-terminal or Guake
PROMPT_COMMAND='echo -ne "\033]0;$(basename ${PWD})\007"'
GIT_PS1_SHOWCOLORHINTS=yes
RET=\$?
source /usr/lib/git-core/git-sh-prompt
if [ "$color_prompt" = yes ]; then
color_reset=$(tput sgr0)
color_bold=$(tput bold)
color_white=$(tput setaf 7)
color_jobs=$(tput setaf 7)
color_user=$(tput setaf 3)
color_dir=$(tput setaf 4)
color_load=$(tput setaf 5)
color_succeed=$(tput setaf 2)
color_fail=$(tput setaf 1)
sep=$(tput setaf 7)\)
PS1="${color_user}\u${sep}\[\D{%T}\]${sep}${color_reset}\$(__git_ps1)${color_dir}\W${color_reset}${sep}\`if [[ ${RET} == 0 ]]; then echo \"${color_succeed}0\"; else echo \"${color_fail}${RET}\"; fi\`${color_white}${sep}${color_reset}\$ "
else
PS1="\u${sep}\[\D{%T}\]${sep}\$(__git_ps1)\W${sep}\`if [[ ${RET} == 0 ]]; then echo \"0\"; else echo \"${RET}\"; fi\`${sep}\$ "
fi
这是一个正在使用的命令行示例:
snim2)10:39:53)dirname)0)$ cd scratch
snim2)10:39:54)scratch)0)$ git init
Initialised empty Git repository in .../scratch/.git/
snim2)10:39:56) (master)scratch)0)$ asdasda
asdasda: command not found
snim2)10:40:05) (master)scratch)1)$ $?
127: command not found
snim2)10:40:10) (master)scratch)1)$
如您所见,当命令的返回码非零时,它在提示符中显示为1),而不是显示正确的返回码——在本例中为127)。如何解决这个问题?
【问题讨论】:
-
不应该
RET=\$?只是RET=$?吗?无需转义$即可获得latest exit code -
好点。将该行更改为
RET='$?'并没有给出不同的结果,并且没有这些单引号,提示总是显示最后一个命令成功。 -
单引号不会扩展变量,因此
RET将字面意思是'$?'。RET=$?应该没问题! (不带引号) -
$(__git_ps1)是最后一个命令。请不要使用反引号`。请改用$(...)。奇怪的大括号用法 - 只需将其写在单引号中。PS1="\u${sep}-sep在此处未设置。我想知道\)中的sep=...\)是不是一个错字。 -
sep设置在PS1...上方的行上,对吗?我已经做出了你们俩建议的更改,但这并不能解决问题。RET=$?仍然显示每个成功的命令...