每当我在命令窗口工作时,我得到错误:工作线正上方的“bash:__ gitdir:command not found”(换句话说,在任何命令之后,在它提示新的命令之前)
关于如何实现这一目标的任何想法?
答案 0 :(得分:6)
__gitdir
是git-completion.bash
脚本提供的一个函数,它允许bash在您键入git
命令时自动完成。您是否在__gitdir
或其他个人资料/登录脚本中使用.bashrc
而没有采购git-completion.bash
?
答案 1 :(得分:4)
您可能在.bashrc
文件中调用了该命令。
尝试在其中搜索__gitdir:
$ grep __gitdir ~/.bashrc
或者发布其内容,可能更容易提供帮助。
答案 2 :(得分:0)
可以通过函数__git_ps1
启用花哨的git提示,该函数可以嵌入PS1
并在每次打印提示时调用。它是在定义特定但可能不同于定义__gitdir
的文件时定义的。 __git_ps1
(调用__gitdir
)可能在/etc/bash_completion.d/git-prompt
或/usr/share/git-core/contrib/completion/git-prompt.sh
或/etc/bash_completion.d/git
(等)......
但如果__git_ps1
最终定义,但__gitdir
没有定义,那么您将收到此错误(每次打印提示时)。例如,如果在__gitdir
中定义了/etc/*
,但在__git_ps1
中找到了/usr/share/*
,那么在chroot环境中,您最终可能会定义__git_ps1
但是__gitdir
未定义。
要“安静”错误消息,请删除花哨的git提示符,或者只是定义它:__gitdir() { :; }
答案 3 :(得分:0)
这不会完全解决原始问题上下文,但对于从旧版本迁移的较新Ubuntu用户可能会有用...
我最近将旧的Ubuntu 12.04计算机升级到较新版本的Ubuntu,我开始发现因__git_dir
设置错误导致PS1
丢失的错误,如其他答案所述。为了理解为什么这个shell函数没有被定义,我认为我的.bashrc
与最新的Ubuntu约定不是最新的。
我的旧版.bashrc
基于旧的Ubuntu系统最初提供的版本,它有类似的内容:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
由较新的Ubuntu系统创建的.bashrc
文件首先尝试使用/usr/share/bash-completion/bash_completion
:
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
当我用新版本替换旧的bash完成源时,我定义了__git_dir
并且从此过后很高兴。