J'ai essayé d'intégrer la branche git actuelle dans mon invite, mais celle-ci ne se comportait pas comme prévu. J'utilise bash sur Ubuntu 16.04 et git 2.7.4. Quand je démarre un terminal, rien de git n'est affiché. Si je source mon .bashrc
de l'intérieur d'un référentiel, la branche est affichée, mais ne se met plus à jour. Voici ce que j'ai écrit dans mon .bashrc:
green="\[\033[01;32m\]"
blue="\[\033[01;34m\]"
no_color="\[\033[00m\]"
purple="\[\033[01;35m\]"
source ~/.git-Prompt.sh
export PS1="$purple\u $green$(__git_ps1 " (%s)") $blue\W $no_color \$ "
J'ai essayé de suivre les instructions de Invite git mais toujours le même résultat. Cependant, si je ne fais que copier la suggestion de git-Prompt: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
cela fonctionne, mais bien entendu, il ne semble pas que je veuille. Y a-t-il une erreur de syntaxe qu'il me manque? Le modèle PS1 fonctionne même si vous n’utilisez pas d’exportation, mais simplement PS1=...
Ok j'ai trouvé la solution. Il n'est pas nécessaire d'utiliser la commande Invite. Le bogue est dû à une erreur de syntaxe.
Si j'assigne le contenu de PS1 avec ""
afin d'utiliser mes variables pour les couleurs, la fonction __git_ps1 n'est exécutée que lorsque .bashrc
est créé.
Mais lorsque j'assigne le contenu PS1 dans ''
et que je le fais sans variables pour la couleur et que j'écris les codes, cela fonctionne comme prévu. Et comme je l'ai lu ici , il semble être préférable de ne pas exporter de PS1 dans l'environnement.
La solution ressemble donc à:
PS1='\[\033[01;35m\]\u \[\033[01;32m\]$(__git_ps1 " (%s)") \[\033[01;34m\]\W \[\033[00m\] \$ '
Cependant, je serais curieux de savoir quelle est la raison de cela. Cela fonctionne dans ""
dans macOS.
En effet, .bashrc
n'est lu qu'une seule fois: lorsque vous démarrez un nouveau shell interactif sans connexion (lorsque vous ouvrez un nouveau terminal, par exemple). Ainsi, le PS1
est défini lors de la première ouverture du terminal et n’est jamais modifié.
La bonne façon de procéder (en supposant que vos scripts git-Prompt
et __git_ps
fonctionnent normalement) est d’utiliser Prompt_COMMAND
. Comme expliqué dans man bash
:
Prompt_COMMAND
If set, the value is executed as a command prior to issuing each
primary Prompt.
Vous voulez que __git_ps1
soit exécuté avant que chaque invite ne soit affichée (ainsi après chaque commande exécutée; après un cd
, par exemple). Par conséquent, vous devez le mettre dans Prompt_COMMAND
. Si votre __git_ps1
est ce que je pense, ce sera le PS1
pour vous. Vous devez juste l'exécuter à chaque fois qu'une invite est affichée. Alors, ajoutez cette ligne à votre ~/.bashrc
:
Prompt_COMMAND="$purple\u $green$(__git_ps1 "(%s)") $blue\W $no_color \$ "
Enfin, je ne peux pas être sûr puisque vous ne montrez pas les scripts pertinents, mais je doute fort que le (%s)
ait un sens ici. Cela va simplement imprimer la chaîne %s
. Si vous avez besoin d’aide supplémentaire, modifiez votre question et i) incluez __git_ps1
et /etc/bash_completion.d/git-Prompt
(ou dites-nous comment vous les avez installés s’ils proviennent d’un paquet Ubuntu) et ii) montrez-nous ce que vous avez demandé. est censé ressembler.
Couru dans le même problème. Vous pouvez simplement échapper la $(...)
à \$(...)
export PS1="$purple\u $green\$(__git_ps1 " (%s)") $blue\W $no_color \$ "