J'essaie d'avoir une partie de mon invite définie dynamiquement par une fonction, donc dans mon .bashrc
j'ai:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Ouvrir un shell me donne ce que j'attends au début:
$ bash
darthbith@server:~/test /home/darthbith/test$
Cependant, lorsque je change de répertoire, la partie définie par la fonction ne change pas:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Mon objectif réel est d'utiliser le git-prompt.sh
script pour afficher la branche de mon référentiel git lorsque je suis dans une seule avec de jolies couleurs et tout, mais le problème est qu'il ne met jamais à jour le nom de la branche lorsque je change de référentiel. L'exemple trivial ci-dessus est la reproduction la plus simple que j'ai pu trouver pour ma question.
Les .bashrc
lignes que j'ai pour intégrer le script git-prompt:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Réponses:
Selon le guide d'invite Bash :
la source
Lorsque vous l'utilisiez
$(..)
entre guillemets, le shell évaluait la substitution de commande avant de l'attribuerPS1
. Ainsi,PS1
ne contenait que la sortie, pas la substitution de commande elle-même. Au lieu de cela, utilisez des guillemets simples ou échappez à$
, de sorte que la chaîne soit transmise telle quellePS1
, puis évaluée lorsque l'invite est définie:Comparer:
la source