web-dev-qa-db-fra.com

__git_ps1 non trouvé mais existe

~/.bash_aliases où je règle PS1 et est inclus dans ~/.bashrc (paramètres par défaut)

# 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\] "

Mais quand je démarre un terminal, je reçois une erreur __ git_ps1: commande introuvable

Mais lorsque je lance le manuel de fonction $ __git_ps1 dans un dossier git, il renvoie la branche actuelle.

Aussi quand je cours manuellement
$ 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\] "

la PS1 est mise à jour et la partie __git_ps1 est ajoutée.

Je ne l'ai pas installé moi-même. J'ai seulement installé Git.
Sudo apt install -y git (version 2.19.1 de Git)

__git_ps1 est défini dans /usr/lib/git-core/git-sh-Prompt (le fichier sur 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

Seul le fichier .bash_aliases apparaît.
Un grep complet de git-sh-promt ne renvoie que des correspondances binaires

Sudo grep 'git-sh-Prompt' -nr /

Qu'est-ce qui ne va pas ici?

PS1 weirdness

1
janw

Utiliser une version décolorée pour plus de clarté:

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

Les guillemets doubles indiquent à Bash d'évaluer ce qu'il y a entre les guillemets, y compris $(__git_ps1), mais /usr/lib/git-core/git-sh-Prompt n'a pas encore été recherché, d'où l'erreur.

Changez-le simplement pour utiliser des guillemets simples, ce qui empêchera l’évaluation de $(__git_ps1) tant que la PS1 n’est pas évaluée (c’est-à-dire lorsque le shell interactif est prêt à être saisi et affiche l’invite).

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

Échapper au signe dollar fonctionne aussi, mais il est plus difficile à lire:

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

Soit dit en passant, ~/.bash_aliases est destiné aux alias de Shell. Il est donc étrange de placer votre PS1. Personnellement, je le mettrais plutôt dans ~/.bashrc.

2
wjandrea