Macos Mac OS X的bash提示着色 目标
我正试图在MacOSX上使用git分支(如果可用)对bash提示符进行着色 我试过的 以我有限的bash知识,我从谷歌搜索和其他问题中拼凑出以下代码:Macos Mac OS X的bash提示着色 目标,macos,git,bash,command-prompt,Macos,Git,Bash,Command Prompt,我正试图在MacOSX上使用git分支(如果可用)对bash提示符进行着色 我试过的 以我有限的bash知识,我从谷歌搜索和其他问题中拼凑出以下代码: function parse_git_branch() { branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) if [[ -z "$branch" ]]; then return fi
function parse_git_branch() {
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ -z "$branch" ]]; then
return
fi
if [[ -z "$(git status -s 2>/dev/null)" ]]; then
color=$'\e[1;32m'
else
color=$'\e[1;31m'
fi
echo "\[$color\] (${branch}) "
}
PS1="\h:\W \u\$(parse_git_branch)\[\e[0m\]\$ "
问题
当着色工作时,提示符包含来自parse\u git\u分支的一些转义序列
leonidas:AYI jason\[\] (master) $
此外,命令历史记录(up)和递归搜索(ctrl+r)等功能会产生额外的字符
leonidas:AYI jason\[\] (master) $h)`re': git status
问题
如何使用适当的可见和不可见字符修复转义
我应该使用tput
而不是这些颜色代码来获得更广泛的支持吗
为什么要这么麻烦呢。只需创建一个.bash\u配置文件
我的建议是:-
export PS1="\[\033[0;30;33m\]\w\[\e[0m\]$ "
您应该设置.bashrc
以引用此
[ -r ~/.bash_profile ] && source ~/.bash_profile
为什么要这么麻烦呢。只需创建一个.bash\u配置文件
我的建议是:-
export PS1="\[\033[0;30;33m\]\w\[\e[0m\]$ "
您应该设置.bashrc
以引用此
[ -r ~/.bash_profile ] && source ~/.bash_profile
问题是扩展数据中不考虑\[\]
为了避免这种情况,您可以在PROMPT\u命令
中将PS1设置为其自身的扩展后版本,其内容在每次提示之前进行评估:
PROMPT_COMMAND='PS1="\h:\W \u$(parse_git_branch)\[\e[0m\]\\\$ "'
由于\[\]
现在是PS1文本值的一部分,并且不是通过提示扩展创建的,因此它们被正确解释 问题在于扩展数据中不考虑\[\]
为了避免这种情况,您可以在PROMPT\u命令
中将PS1设置为其自身的扩展后版本,其内容在每次提示之前进行评估:
PROMPT_COMMAND='PS1="\h:\W \u$(parse_git_branch)\[\e[0m\]\\\$ "'
由于\[\]
现在是PS1文本值的一部分,并且不是通过提示扩展创建的,因此它们被正确解释 (1)切换到,(2)获取,(3),(4)永不回头@奥利·查尔斯沃思,谢谢你的建议。但是我想解决当前的问题。@Kevin,你能提供更多信息吗?在哪里,为什么?当你设置PS1=“…$(parse\u git\u branch)…”
时,它会在寻找文件来源时精确地计算一次。您需要PS1='…'
每次都对其进行评估。@凯文,这不是我遇到的问题。每次都会进行评估。(1)切换到,(2)获取,(3),(4)永不回头@奥利·查尔斯沃思,谢谢你的建议。但是我想解决当前的问题。@Kevin,你能提供更多信息吗?在哪里,为什么?当你设置PS1=“…$(parse\u git\u branch)…”
时,它会在寻找文件来源时精确地计算一次。您需要PS1='…'
每次都对其进行评估。@凯文,这不是我遇到的问题。每次都会对它进行评估。查看我的更新,我正在尝试包括git分支(如果可用)。查看我的更新,我正在尝试包括git分支(如果可用)。是的。更简单的例子:ps1(){echo'\h:\W$;};PS1='$(PS1)'
您的提示将是\h:\W$
。虽然我将尝试此方法,但我觉得它有点黑客味。一定有办法解决我的问题。更简单的例子:ps1(){echo'\h:\W$;};PS1='$(PS1)'
您的提示将是\h:\W$
。虽然我将尝试此方法,但我觉得它有点黑客味。一定有办法解决我的问题。