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 actuel est d'utiliser le git-Prompt.sh
script pour afficher la branche de mon référentiel git lorsque je suis dans l'une avec de jolies couleurs et tout le reste, mais le problème est qu'il ne met jamais à jour la branche. nommer quand 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 lignes .bashrc
que je dois intégrer au script git-Prompt:
source ~/.git-Prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Selon Guide de l’invite de Bash :
[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ " [2159][giles@nikola:~]$ ls bin mail [2200][giles@nikola:~]$
Il est important de noter la barre oblique inverse avant le signe dollar de la substitution de commande. Sans elle, la commande externe est exécutée une seule fois: lorsque la chaîne PS1 est lue dans l'environnement.
Lorsque vous utilisiez $(..)
entre guillemets, le shell évaluait la substitution de commande avant d'assigner à PS1
. Ainsi, PS1
ne contenait que la sortie, pas la substitution de commande elle-même. Utilisez plutôt des guillemets simples ou échappez le $
afin que la chaîne soit transmise telle quelle à PS1
, puis évaluée lorsque l'invite est définie:
$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $
Comparer:
/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $ a
/var $