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

436
digitalextremist

Wirklich seltsame Sache hier nach der AktivierungLinux auf meinem Chromebook. Es ist kein Dealbreaker, aber es ist extrem komisch. Warum wird PS1immer darauf eingestellt?

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

Sogar wenn ich das am Ende benutze .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 daran ist, dass, wo immer ich es stelle export PS1=, es in der Datei physisch zu dem ersten PS1Eintrag geändert wird, den ich oben erwähnt habe. Das bedeutet, dass alle diese möglichen Standorte tatsächlich geändert und PS1durch einen Vorgang von außen wieder eingebrannt werden:

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

Und noch seltsamer! Wenn ich eine Datei mit dem Namen erstellen ~/.promptzum Beispiel, und fügen Sie ihn in entweder laufen ~/.bashrcoder ~/.profilemit source ~/.promptdann, dass auch Datei überschrieben wird.

Ich habe mich schon auf einen export PROMPT_COMMAND=''Ratschlag eingestellt, den ich gesehen habe, was nicht funktioniert hat, aber mich zu folgendem fü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 
1
Sie müssen PS1 nicht exportieren: Es handelt sich um eine * shell * -Variable, nicht um eine * environment * -Variable glenn jackman vor 5 Jahren 0

1 Antwort auf die Frage

0
harrymc

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

PROMPT_COMMAND funktioniert, da es später und jedes Mal wiederholt ausgeführt wird, bevor Bash eine Eingabeaufforderung anzeigt. Die Änderung wird also überschrieben.

Sie sollten sicherstellen, dass Sie PS1 einstellen, nachdem git seine Sachen gemacht hat, aber ich kann nicht sagen, wo es ist.

Hinweis: Siehe diese StackOverflow-Antwort .

Der Grund, warum ich "PS1" ändere, ist, weil * ich * den Teil "__git_ps1" hinzugefügt habe, so dass ich sehen kann, welcher Zweig eines Repositorys in dem Verzeichnis abgelegt wird, in dem ich mich befinde. also dieselbe Seite. digitalextremist vor 5 Jahren 0