如何检查.bashrc是否安装了Git

时间:2011-09-03 10:33:10

标签: git bash

我正在使用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

7 个答案:

答案 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缺失" 网络