我正在使用Git,我在.bashrc
中更改了以下行,要在pwd
是Git Repo时在提示符中显示当前的签出分支。我正在使用的操作系统是:Ubuntu 32bit
# Original PS1 Line
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
我正在使用此行在shell提示符中显示git repo的当前分支,而不是上面的行。
# PS1 Line to show current Git Branch in the Prompt
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
问题是当我把它交给朋友时,Shell会在目录之间导航时给出错误__git_ps1: command not found
,因为脚本会在更改目录时检查git分支。
如何检查Git是否已安装并仅在安装了git时执行分支检查?
修改 正如ayckoster建议的那样,我提出了以下几行代码:
if [ "$color_prompt" = yes ]; then
git --version
GIT_IS_AVAILABLE=$?
if [ $GIT_IS_AVAILABLE -eq 0 ]; then
# PS1 Line to show current Git Branch in the Prompt
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
else
# Original PS1 Line
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
现在,每当我打开终端时,我都会将git --version
输出到屏幕,而安装了Git,我得到以下错误,而在未安装Git时打开终端:
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
我该如何清除这个?感谢。
最终修改:
这是我最终提出的代码,您可以在.bashrc
中使用此代码在shell提示符中显示当前git branch
if [ "$color_prompt" = yes ]; then
if git --version &>/dev/null; then
# PS1 Line to show current Git Branch in the Prompt
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;32m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
else
# Original PS1 Line
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
else
if git --version &>/dev/null; then
# PS1 Line to show current Git Branch in the Prompt
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(__git_ps1 "(%s)")\$ '
else
# Original PS1 Line
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
fi
答案 0 :(得分:21)
尝试执行
git --version
根据返回值$?
,您可以假设是否安装了git。如果你得到0一切都很好,否则没有安装git。你也可以test
这个。
这假设一切都设置正确并且git位于$ PATH中并且git命令未重命名。
像这样使用
git --version 2>&1 >/dev/null # improvement by tripleee
GIT_IS_AVAILABLE=$?
# ...
if [ $GIT_IS_AVAILABLE -eq 0 ]; then #...
答案 1 :(得分:4)
使用which
会有所帮助。如果它什么也没有返回 - >没有安装git。
答案 2 :(得分:2)
我建议使用hash
,因为它是内置的,因此无需创建新进程。它还缓存了命令。
hash git && commands
答案 3 :(得分:2)
使用type
:
$ type -t git
file
$ type -t nogit
$
答案 4 :(得分:1)
#!/bin/bash
command -v git >/dev/null 2>&1 ||
{ echo >&2 "Git is not installed. Installing..";
yum install git
}
答案 5 :(得分:0)
您可以使用以下内容根据Git的存在有条件地更改Bash提示:
PS1='$no-git-prompt'
if [ -a /usr/local/bin/git ] || [ -a /usr/local/git ]; then
PS1='$git-prompt'
Linux教程博客条目"Tutorial: Conditions in bash scripting (if statements)"显示了不同的if条件,例如-a
来检查文件是否存在。
我在此解决方案中遇到的问题是,它取决于git
的位置(即上例中的/usr/local/bin/
或/usr/local/
)。这可能不是问题,因为当通过apt-get安装git时,在/usr/local/
中可以找到Ubuntu上的git。
如果您不想依赖于git的安装位置,那么您可以使用命令替换来查看which
命令的结果。
PS1='$no-git-prompt'
if [ $(which git) ]; then
PS1='$git-prompt'
然而,使用which
被其他回答者视为“邪恶”。 (虽然,我感兴趣的是他们充实了他们对这些陈述的推理,而不仅仅是在没有提供推理的情况下做出声明。)
答案 6 :(得分:0)
这对我有用:
GIT_VERSION =" $(git --version)" 如果[" $ GIT_VERSION" !="未找到命令" ]。然后 回声" git已经"安装 其他 echo" git缺失" 网络