我能够在shell提示符中显示git分支名称。但每当我使用屏幕时,我都会
bash: parse_git_branch: command not found
并且未显示git分支。 请帮助我在屏幕会议中得到这个。
我在.bash_profile中有以下内容。
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/
}
export PS1="[\W\$(parse_git_branch)]$ "
我没有.git-completion.bash
系统规格:
答案 0 :(得分:5)
我在屏幕下运行时遇到了同样的问题,并且能够通过将parse_git_branch()
函数的定义从.bash_profile
移到.bashrc
来解决。
答案 1 :(得分:5)
当您打开终端时,会执行.bash_profile
,因此会定义PS1
。然后执行屏幕,屏幕读取环境变量PS1
,其中包括对parse_git_branch
的调用并尝试解析它。但是,由于屏幕没有执行.bash_profile
,因此未在屏幕内定义函数parse_git_branch
。
将PS1
的定义移至.bashrc
,因为屏幕和iTerm都会执行它。
答案 2 :(得分:2)
这更简单,避免了不必要的sed:
parse_git_branch () {
while read -r branch; do
[[ $branch = \** ]] && current_branch=${branch#* }
done < <(git branch 2>/dev/null)
[[ $current_branch ]] && printf ' [%s]' "$current_branch"
}
答案 3 :(得分:1)
您的sed语句末尾缺少'
:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="[\W\$(parse_git_branch)]$ "
Othewerise,它在bash-3.2
答案 4 :(得分:1)
在切换到root或开始ssh-agent /bin/bash
时,我在OS X High Sierra中遇到了同样的错误我已将其解析为将其放入/etc/bashrc
并检查我是否为root
if [[ $UID == 0 ]]; then
PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
fi