Cómo verificar si Git está instalado desde .bashrc

Estoy usando Git, he cambiado la siguiente línea en .bashrc , para mostrar la twig de salida actual en prompt, cuando pwd es un Git Repo. El sistema operativo que estoy usando es: Ubuntu 32bit

 # Original PS1 Line PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' 

Estoy usando esta línea para mostrar la twig actual de git repo en el intérprete de commands de shell, en lugar de la línea anterior.

 # 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\]\$ ' 

El problema es que cuando se lo doy a mis amigos, Shell da el error __git_ps1: command not found , mientras navega entre directorys, ya que el script busca git branch en los directorys cambiantes. ¿Cómo verifico si Git está instalado y realizo la verificación de twig solo si está instalado git?

Editar: Como lo sugirió ayckoster, aparecí con las siguientes líneas de código:

 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 

Ahora, cada vez que abro el terminal obtengo el git --version salida a la pantalla, mientras que Git está instalado, y aparece el siguiente error al abrir el terminal cuando Git no está instalado:

 The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git 

¿Cómo borro esto? Gracias.

Edición final:

Este es el código que se me ocurrió finalmente. Siéntete libre de usar este código en tu .bashrc para mostrar la git branch actual de git branch en el intérprete de commands de tu shell.

 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 

Intenta ejecutar

 git --version 

Dependiendo del valor de retorno $? puedes asumir que git está instalado o no. Si obtienes 0 todo está bien, de lo contrario, git no está instalado. También puedes test esto.

Esto supone que todo está configurado correctamente y que git está en $ PATH y que el command git no cambia de nombre.

Úselo así

 git --version 2>&1 >/dev/null # improvement by tripleee GIT_IS_AVAILABLE=$? # ... if [ $GIT_IS_AVAILABLE -eq 0 ]; then #... 

utilizando lo which debería ayudar. Si no devuelve nada -> git no está instalado.

Recomiendo usar hash ya que está incorporado así que no hay necesidad de crear un nuevo process. También almacena el command en caching.

 hash git && commands 

usar type :

 $ type -t git file $ type -t nogit $ 

Puede usar lo siguiente para cambiar de manera condicional su indicador Bash en function de la existencia de Git:

 PS1='$no-git-prompt' if [ -a /usr/local/bin/git ] || [ -a /usr/local/git ]; then PS1='$git-prompt' 

La input del Blog Tutorial de Linux "Tutorial: Condiciones en los scripts de bash (declaraciones if)" muestra las diferentes condiciones disponibles, como -a para verificar la existencia de un file.

El problema que veo con esta solución es que depende de la location de git (es decir, /usr/local/bin/ o /usr/local/ en el ejemplo anterior). Esto puede no ser un problema ya que git en Ubuntu se encuentra en /usr/local/ cuando git se instala a través de apt-get.

Si no desea depender de la location de git instalada, puede usar la sustitución de commands para ver los resultados del command.

 PS1='$no-git-prompt' if [ $(which git) ]; then PS1='$git-prompt' 

Sin embargo, el uso de lo which ha sido considerado como "malvado" por otros respondedores. (Aunque, me interesaría que desarrollaran su razonamiento para tales declaraciones en lugar de simplemente hacer la statement sin proporcionar su razonamiento).

 #!/bin/bash command -v git >/dev/null 2>&1 || { echo >&2 "Git is not installed. Installing.."; yum install git } 

Esto funcionó para mí:

GIT_VERSION = "$ (git –version)" if ["$ GIT_VERSION"! = "Comando no encontrado"]; luego echo "git ya" instalado else echo "git falta" fi