Ich versuche , einen Teil meines Prompt Set durch eine Funktion dynamisch zu haben, also in meine .bashrc
ich:
asdf ()
{
echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "
Das Öffnen einer Shell gibt mir zunächst das, was ich erwarte:
$ bash
darthbith@server:~/test /home/darthbith/test$
Wenn ich jedoch das Verzeichnis ändere, ändert sich der von der Funktion definierte Teil nicht:
darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$
Mein eigentliches Ziel ist es, mithilfe des git-prompt.sh
Skripts den Zweig meines Git-Repository anzuzeigen, wenn ich in einem mit hübschen Farben und allem bin. Das Problem ist jedoch, dass der Zweigname nie aktualisiert wird, wenn ich das Repository ändere. Das obige triviale Beispiel ist die einfachste Reproduktion, die ich für meine Frage finden konnte.
Die .bashrc
Zeilen, die ich zum Einbinden des git-prompt-Skripts benötigen:
source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "
Antworten:
Laut Bash-Eingabeaufforderung Howto :
quelle
Bei Verwendung
$(..)
in doppelten Anführungszeichen hat die Shell die Befehlsersetzung vor der Zuweisung zu ausgewertetPS1
. SomitPS1
enthielt nur die Ausgabe, nicht die Befehlsersetzung selbst. Verwenden Sie stattdessen entweder einfache Anführungszeichen oder die Escape-Taste,$
damit die Zeichenfolge unverändert übergebenPS1
und ausgewertet wird, wenn die Eingabeaufforderung festgelegt wird:Vergleichen Sie:
quelle