我正在尝试自定义bash提示,但遇到一些条件问题。
我目前的情况PS1
是这样的。
export PS1="\
$PS1USERCOLOR\u\
$COLOR_WHITE@\
$COLOR_GREEN\h\
$COLOR_WHITE:\
$COLOR_YELLOW\W\
\`if type parse_git_branch > /dev/null 2>&1; then parse_git_branch; fi\`\
\`if [ \$? = 0 ]; then echo -e '$COLOR_WHITE'; else echo -e '$COLOR_RED'; fi\`\$\
$COLOR_WHITE"
前6行只是设置常规PS1
内容。
第7行然后调用一个函数以显示当前的git分支和状态(如果适用)。
然后,第8行测试前一个命令的返回码,并$
在最后更改的颜色。
第9行将提示重新设置为白色,以供用户执行命令。
但是,第8行正在响应第7行的功能返回的代码,而不是我最初期望的先前命令。
我已经试过将8号线移到7号线之前,并进行适当的传送。但是我不希望第7行在第7行之前,它$
必须在最后。
我试过早些时候将变量设置为的值,$?
然后像这样测试该变量
export PS1="\
\`RETURN=\$?\`\
$PS1USERCOLOR\u\
$COLOR_WHITE@\
$COLOR_GREEN\h\
$COLOR_WHITE:\
$COLOR_YELLOW\W\
\`if type parse_git_branch > /dev/null 2>&1; then parse_git_branch; fi\`\
\`if [ \$RETURN = 0 ]; then echo -e '$COLOR_WHITE'; else echo -e '$COLOR_RED'; fi\`\$\
$COLOR_WHITE"
但这是行不通的。
有人知道如何解决我的问题吗?
正确的方法是这样使用PROMPT_COMMAND
:
prompt_cmd () {
LAST_STATUS=$?
PS1="$PS1USERCOLOR\u"
PS1+="$COLOR_WHITE@"
PS1+="$COLOR_GREEN\h"
PS1+="$COLOR_WHITE:"
PS1+="$COLOR_YELLOW\W"
if type parse_git_branch > /dev/null 2>&1; then
PS1+=$(parse_git_branch)
fi
if [[ $LAST_STATUS = 0 ]]; then
PS1+="$COLOR_WHITE"
else
PS1+="$COLOR_RED"
fi
PS1+='\$'
PS1+="$COLOR_WHITE"
}
由于PROMPT_COMMAND
是在每个提示之前进行评估的,因此您只需执行代码即可PS1
为每个提示实例设置所需的方式,而不是尝试将延迟逻辑嵌入字符串本身。
一些注意事项:
$?
在覆盖所需的值之前,必须保存在代码的第一行。\$
;。PS1+="\\\$"
如果愿意,可以使用。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句