Warum wird PS1 gegen meinen Willen durch einen externen Prozess physisch in der Datei geändert?

Warum wird PS1 gegen meinen Willen durch einen externen Prozess physisch in der Datei geändert?

Wirklich komische Dinge passieren hier nachAktivierenLinuxauf meinem Chromebook. Das ist kein Dealbreaker, aber es ist extrem seltsam. Warum wird es PS1immer so eingestellt?

\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\] \[\033[01;34m\]$\[\033[00m\]

Auch wenn ich dies am Ende von verwende .profile?

export PS1='\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " >> %s") \[\033[01;34m\]$\[\033[00m\] '

Das wirklich Erstaunliche ist, dass, wo immer ich es hinlege export PS1=, es ankommtphysisch in der Datei geändertzum ersten PS1Eintrag, den ich oben erwähnt habe. Das bedeutet, dass alle diese möglichen Standortetatsächlich verändertPS1und durch einen externen Prozess wieder in den eingebrannten Zustand zurückversetzt :

  • ~/.profile
  • ~/.bashrc
  • /etc/profile.d/git.sh

Und noch seltsamer! Wenn ich eine Datei namens example erstelle und sie entweder in oder ~/.promptausführe , mit then~/.bashrc~/.profilesource ~/.promptDasDatei wird ebenfalls überschrieben.

Ich habe es bereits export PROMPT_COMMAND=''gemäß dem Ratschlag, den ich gesehen habe, eingestellt. Das hat nicht funktioniert, hat mich aber zu Folgendem geführt:

Nur das hat bisher funktioniert und ich möchte wissen, warum:

function prompt_command {
    export PS1='\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " >> %s") \[\033[01;34m\]$\[\033[00m\] '
}

export PROMPT_COMMAND=prompt_command

Antwort1

Sie haben anscheinend Folgendes installiert, gitwas meiner Meinung nach für die Änderungen verantwortlich ist, die Sie sehen, wenn es $(__git_ps1 " >> %s")in der Mitte Ihrer PS1-Zeichenfolge hinzugefügt wird.

PROMPT_COMMAND funktioniert, weil es später und jedes Mal wiederholt ausgeführt wird, bevor Bash eine Eingabeaufforderung anzeigt, und so die Änderung überschreibt.

Sie sollten sicherstellen, dass Sie PS1 festlegen, nachdem Git seine Arbeit erledigt hat, aber ich kann nicht sagen, wo es ist.

Hinweis: Siehe dies StackOverflow-Antwort.

verwandte Informationen