Git完成和PS1无法正常工作:Ubuntu 12.04上的"sudo -s"或"sudo su"上的"__git_ps1:command not found"

Chr*_*lli 10 git bash bash-completion

我安装了git和git-flow完成,将这些行添加到root的.bashrc和Ubuntu 12.04机器上的normal_user:

source /etc/git-completion.bash
source /etc/git-flow-completion.bash
GIT_PS1_SHOWUPSTREAM="verbose"
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
Run Code Online (Sandbox Code Playgroud)

当我以root身份登录或者normal_user时,git完成工作.但是,如果我使用"sudo -s"或"sudo su"git完成不起作用,每次按回车时我都会不断收到"__git_ps1:command not found".我试图删除"source"命令并使用"apt-get install bash-completion"(已经安装了bash-completion).因此,即使没有2源,我也会得到完全相同的行为.

有人知道问题是什么以及如何使其发挥作用?

Pet*_*oes 15

执行sudo su此操作时,将不会为用户提供信息.bashrc.PS1继承自您所做的用户sudo su,但新shell不知道它可以找到的位置___git_ps1

您需要通过执行来模拟登录 sudo su -l


小智 5

在你的情况下,它发生是因为git-prompt.sh文件没有在终端启动时启动,它可以find contrib/completion/git-prompt.sh在最初的git-core文件中.

可能已经由机器出现,用于搜索:

找到〜-name git-prompt.sh

可能需要花费很多时间,因此最好指定而不是/搜索更精确,可能您猜测可能找到的位置.什么时候会发现,在你的promt改变表达式之前添加.bashrc作为一个例子,因为它是由我做出的方式的指示:

if [-f $ HOME/git/1.8.0/contrib/completion/git-prompt.sh]; 然后

.$ HOME /混帐/ 1.8.0 /的contrib /完成/ git-prompt.sh

科幻

毕竟做了:

.在〜/ .bashrc


小智 5

提示功能于 2012 年 5 月 22 日从 git-completion.bash 中拆分为 git-prompt.shsource你也需要那个。Git 1.7.12 是第一个看到此更改的版本。我在更新 git-completion.bash 时遇到了同样的问题。