__git_ps1 未找到但确实存在

__git_ps1 未找到但确实存在

~/.bash_aliases我在其中设置了 PS1,并且包含在~/.bashrc(默认设置)中

# color PS1
PS1="\[\033[01;90m\]\D{%H:%M} \[\033[01;33m\]Ubuntu\[\033[00m\] \[\033[01;34m\]\w\[\033[01;35m\]$(__git_ps1) \[\033[01;36m\]\$\[\033[00m\] "

但是当我启动终端时出现错误__git_ps1:未找到命令

但是当我在 git 文件夹中运行功能手册时,$ __git_ps1它确实回显了当前分支。

此外当我手动运行
$ PS1="\[\033[01;90m\]\D{%H:%M} \[\033[01;33m\]Ubuntu\[\033[00m\] \[\033[01;34m\]\w\[\033[01;35m\]$(__git_ps1) \[\033[01;36m\]\$\[\033[00m\] "

PS1 已更新,__git_ps1部分内容已添加。

我没有自己安装,只安装了git。
sudo apt install -y git (git版本2.19.1)

__git_ps1定义在/usr/lib/git-core/git-sh-prompt(文件github

grep __git_ps1 ~/.bashrc ~/.profile ~/.bash_profile ~/bash.login ~/.bash_aliases /etc/bash.bashrc /etc/profile /etc/profile.d/* /etc/environment 2>/dev/null

.bash_aliases显示文件。git
-sh-promt 的完整 grep 仅返回二进制匹配

sudo grep 'git-sh-prompt' -nr /

这里有什么问题?

PS1 怪异之处

答案1

为了清晰起见,使用脱色版本:

PS1="\D{%H:%M} Ubuntu \w$(__git_ps1) \$ "

双引号告诉 Bash 评估引号之间的内容,包括$(__git_ps1),但/usr/lib/git-core/git-sh-prompt尚未获取来源,因此出现错误。

只需将其更改为使用单引号,这将阻止$(__git_ps1)在 PS1 被评估之前被评估(即当交互式 shell 准备好输入并显示提示时)。

PS1='\D{%H:%M} Ubuntu \w$(__git_ps1) \$ '

转义美元符号也有效,但是更难阅读:

PS1="\D{%H:%M} Ubuntu \w\$(__git_ps1) \$ "

顺便说一句,~/.bash_aliases是用于 shell 别名的,所以把它放在这里很奇怪PS1。我个人会把它放在这里~/.bashrc

相关内容