我正在尝试构建一个 Bash 提示符,其中包含我的 git 分支信息(使用 git 的 bash-completion 中的 __git_ps1 )和一个小彩色笑脸来指示最近运行的命令是否成功。
笑脸是使用这种技术创建的,我在这里找到了这样的技术:
SMILEY="${GREEN}:)${COLOR_NONE}"
FROWNY="${RED}:(${COLOR_NONE}"
STATUS_EMOTICON="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"
这是我想使用的提示行:
export PS1="[\t]${RED}[\u@$MACHINE:${BOLD_CYAN}\w${GREEN}\$(__git_ps1 ' %s')${RED}]${COLOR_NONE} \`${STATUS_EMOTICON}\`\n$ "
不幸的是,看起来由 __git_ps1 运行的程序覆盖了$?
值,即使在跑步之后,我最终每个表情符号都是绿色笑脸false
.
取出 __git_ps1 调用...
export PS1="[\t]${RED}[\u@$MACHINE:${BOLD_CYAN}\w${RED}]${COLOR_NONE} \`${STATUS_EMOTICON}\`\n$ "
...使表情符号正常工作。
所以我显然需要做的是评估${STATUS_EMOTICON}
before跑步__git_ps1
,但包括评估值after __git_ps1
的输出。那可能吗?
不要放$(cmd)
or `cmd`
直接在你的PS1
。相反,使用 Bash 的PROMPT_COMMAND
变种我通常做的是定义一个函数_PS1_cmd
并设置PROMPT_COMMAND=_PS1_cmd
。然后在_PS1_cmd
,我设置了我想包含的杂项变量PS1
。例如:
THE-OLD-PROMPT # cat prompt.rc
function _PS1_cmd()
{
local saveExit=$?
# This non-zero exit will not affect $? on command line
g_git_ps1=$( echo TESTING; exit 1 )
if (( saveExit )); then
g_smiley=':('
else
g_smiley=':)'
fi
# Seems like this is not necessary, at least with bash 4.2.37. But
# to be safe, always return it.
return $saveExit
}
PROMPT_COMMAND=_PS1_cmd
PS1='$g_git_ps1 $g_smiley '
THE-OLD-PROMPT # source ./prompt.rc
TESTING :) ( exit 123 )
TESTING :( echo $?
123
TESTING :) echo $?
0
TESTING :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)