Mein PS1
in meinem ~/.bash_profile
:
export PS1="\\n\[\033[38;5;246m\]\u@\[\033[38;5;245m\]\h\[\033[38;5;15m\] \[\033[38;5;28m\]\w\[\033[38;5;15m\]\[\033[38;5;2m\]`__git_ps1`\[\033[38;5;15m\] \[\033[38;5;90m\]\t\[\033[38;5;15m\] \[\033[38;5;232m\]\[\033[38;5;15m\] \n\[\033[38;5;0m\]\\$ "
(Entschuldigung, ich habe keine Aliase für meine Farbcodes. Ich habe diese Eingabeaufforderung mit einem Online-Editor erstellt.)
Das ist ein bisschen chaotisch, erzeugt aber eine sehr schöne Eingabeaufforderung:
Aber der aktuell angezeigte Zweig ist immer falsch, wenn ich wechsle
Ich bin mir nicht sicher, warum das passieren würde. Wenn ich den Befehl selbst ausführe, erhalte ich den richtigen Wert.
$ echo `__git_ps1`
(dev)
Wenn ich das .bash_profile als Quelle verwende, wird der neue Wert eingehen (aber beim nächsten Wechsel falsch sein). Mache ich etwas falsch?
__git_ps1
Teil, damit Sie keine Escape-Zeichen während der gesamten Eingabeaufforderung korrigieren müssen), damit es nicht sofort aufgerufen / ausgewertet wird und nicht erweitert wird, damit die Shell zur Anzeigezeit der Eingabeaufforderung aufruft.Antworten:
Mit
`__git_ps1`
doppelten Anführungszeichen führt dieser Befehl den Befehl aus__git_ps1
und weist der Variablen seine Ausgabe (und anderen umgebenden Text) zuPS1
. Daher zeigt Ihre Eingabeaufforderung den Zweig an, der bei der.bash_profile
Ausführung ermittelt wurde.Sie müssen
__git_ps1
jedes Mal ausführen, wenn bash eine Eingabeaufforderung anzeigt. (Eigentlich müssen Sie es nicht erneut ausführen, bis sich die Git-Informationen geändert haben, aber das ist schwer zu erkennen.) Es gibt zwei Möglichkeiten, dies zu tun.Fügen Sie den Literaltext
`__git_ps1`
in diePS1
Variable ein. Stellen Sie sicher, dass bash so konfiguriert ist, dass Shell-Erweiterungen für die Eingabeaufforderungszeichenfolge ausgeführt werden, wobei diepromptvars
Option aktiviert ist. Dies ist standardmäßig der Fall, kann jedoch mit deaktiviert werdenshopt -u promptvars
.Aktualisieren Sie den Inhalt der Eingabeaufforderung durch einen Befehl, der von der
PROMPT_COMMAND
Variablen ausgeführt wird.Übrigens ist die Eingabeaufforderung eine Shell-Konfiguration, keine globale Einstellung, daher sollten Sie sie festlegen
~/.bashrc
, nicht in~/.bash_profile
.quelle
Es ist nur eine einfache Frage des Zitierens. Wechseln Sie
`__git_ps1`
zu\$(__git_ps1)
oder, wenn Sie Backticks verwenden müssen :\`__git_ps1\`
.Um sich selbst zu überzeugen, ändern Sie einfach Ihre PS1 in (öffnen Sie eine neue Shell-Instanz, wenn Sie sauber zu Ihrem vorherigen Setup zurückkehren möchten):
Das einzige Problem ist, dass es nicht aktualisiert wird (warten Sie einige Sekunden, bis Sie die Eingabetaste drücken).
Aber das wird:
Das ist alles. schreibe
exit
. (Aktualisieren Sie Ihre Eingabeaufforderung) Machen Sie sich wieder an die Arbeit.quelle
http://mediadoneright.com/content/ultimate-git-ps1-bash-prompt
Beachten Sie unten, dass sie nicht festlegen:
export PS1 = "\ n ...` __git_ps1 ...
Das hat es auf dieses kranke Stück Arbeit gebracht:
Die relevanten Bits sind "$ (__ git_ps1" (% s) "oder" $ (__ git_ps1 "{% s}").
quelle