Das ist richtig: PS1
ist nur in interaktiven Instanzen von Bash sinnvoll, daher sollte es eingestellt ~/.bashrc
und nicht exportiert werden. PS1
ist auch in anderen Shells von Bedeutung, hat aber eine andere Bedeutung, da sich die prompten Erweiterungen zwischen den Shells unterscheiden. Tatsächlich kann sogar zwischen Bash-Instanzen PS1
unterschiedliche Bedeutungen haben, da die Bedeutung (zumindest promptvars
) von den Shell-Optionen abhängt .
Das Exportieren PS1
in die Umgebung von .profile
ist ein Rückfall in die 1970er Jahre, als es nur eine Shell gab, die es verwendete (die Bourne-Shell) und keine Konfigurationsdatei hatte. Es funktioniert auch heute noch, wenn Sie immer dieselbe Shell verwenden und sie niemals anders konfigurieren. Aber alle modernen Schalen , die nicht rein für Skripting ausgelegt sind (csh, ksh, bash, zsh, ...) Lesen Sie eine Konfigurationsdatei , wenn interaktiv (gestartet .cshrc
, .kshrc
, .bashrc
, .zshrc
, ...), so dass die 1970er - Methode ist nicht mehr notwendig. Durch Einstellungen PS1
und andere Shell-spezifische Einstellungen in einer Shell-spezifischen Datei und nicht durch Exportieren in die Umgebung werden Fehler vermieden, wenn Sie eine andere Shell-Konfiguration oder eine andere Shell oder ein anderes Terminal verwenden, das Ihre übliche Eingabeaufforderung nicht anzeigen kann Raffiniertheit. RahmenPS1
in einer Shell-spezifischen Datei funktioniert die ganze Zeit, während das Einrichten .profile
und Exportieren nur in „einfachen“ Fällen funktioniert. Es gibt also keinen Grund, es nicht richtig zu machen, aber es gibt viele schlechte Tutorials im Internet und sogar schlechte Standardkonfigurationen in Distributionen. C'est la vie .
PS1
von der.profile
Arbeit für Nicht-Login-Bash-Shells, da sie diese nicht beziehen würden? Wollen Sie damit sagen, dass dies funktionieren würde, weil die Nicht-Login-Shell von einer Login-Shell getrennt würde und somitPS1
über die Umgebung erben würde ?if [ -n "$PS1" ] ; then proceed assuming an INTERACTIVE shell ; fi
dass häufig in den .bashrc-Dateien von Personen nur Dinge wie die Befehlsvervollständigung geladen werden, wenn dies die interaktive Terminal-Shell eines Benutzers ist. Wenn es dort funktioniert, wird dieselbe Logik in Shell-Skripten angezeigt, daher muss es "exportiert" werden. STATT sollten wir nach interaktiven / Terminalbenutzern mittty -s
oder suchentest -t 0
.PS1
Test ist/etc/profile
zum Beispiel schon seit Ewigkeiten bei Debian . Ich weiß nicht, wo diese schlechte Praxis entstanden ist. Ich vermute, es kam von einem bestimmten Anwendungsfall (vielleicht Rlogin oder SSH-Logins erkennen?), In dem es zufällig funktioniert hat. Leider scheitert es in vielen anderen Fällen, daher die vielen Fragen zu diesem Thema hier und anderswo.CLICOLOR
und auchLS_COLORS
nicht? @DouglasDD bedeutet das, dass derif [[-z $p1]];then return fi
Check in meinem.bashrc
fehlerhaft ist?