Dies ist eine vorgelagerte Entscheidung von Debian. Die Gründe dafür werden in diesem sehr schönen Wiki-Beitrag erläutert , von dem der folgende ein Auszug ist. Die Zusammenfassung lautet "um sicherzustellen, dass GUI- und Nicht-GUI-Anmeldungen auf die gleiche Weise funktionieren":
Nehmen wir als Beispiel xdm. Pierre kommt eines Tages aus dem Urlaub zurück und stellt fest, dass sein Systemadministrator xdm auf dem Debian-System installiert hat. Er meldet sich gut an, und xdm liest seine .xsession-Datei und führt fluxbox aus. Alles scheint in Ordnung zu sein, bis er eine Fehlermeldung im falschen Gebietsschema erhält! Da er die LANG-Variable in seinem .bash_profile überschreibt und xdm niemals .bash_profile liest, wird seine LANG-Variable jetzt auf en_US anstelle von fr_CA gesetzt.
Die naive Lösung für dieses Problem besteht nun darin, dass er seinen Fenstermanager so konfigurieren kann, dass er "xterm -ls" startet, anstatt "xterm" zu starten. Dieses Flag teilt xterm mit, dass anstelle einer normalen Shell eine Login-Shell gestartet werden soll. Unter diesem Setup erzeugt xterm / bin / bash, fügt jedoch "- / bin / bash" (oder vielleicht "-bash") in den Argumentvektor ein, sodass bash wie eine Login-Shell funktioniert. Dies bedeutet, dass jedes Mal, wenn er ein neues xterm öffnet, / etc / profile und .bash_profile (integriertes Bash-Verhalten) und dann .bashrc (weil .bash_profile dies verlangt) gelesen werden. Dies scheint zunächst in Ordnung zu sein - seine Punktedateien sind nicht schwer, sodass er die Verzögerung nicht einmal bemerkt -, aber es gibt ein subtileres Problem. Er startet auch einen Webbrowser direkt aus seinem Fluxbox-Menü. und der Webbrowser erbt die LANG-Variable von fluxbox, die jetzt auf das falsche Gebietsschema eingestellt ist. Obwohl seine xterms in Ordnung sind und alles, was von seinen xterms aus gestartet wird, in Ordnung ist, zeigt ihm sein Webbrowser immer noch Seiten in der falschen Ländereinstellung an.
Also, was ist die beste Lösung für dieses Problem? Es gibt wirklich keinen universellen. Ein besserer Ansatz ist, die .xsession-Datei so zu ändern, dass sie ungefähr so aussieht:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Dies bewirkt, dass die Shell, die das xsession-Skript interpretiert, / etc / profile und .bash_profile einliest, sofern diese vorhanden und lesbar sind, bevor xmodmap oder xterm ausgeführt oder der Fenstermanager "ausgeführt" wird. Es gibt jedoch einen möglichen Nachteil bei diesem Ansatz: Unter xdm wird die Shell, die .xsession liest, ohne ein steuerndes Terminal ausgeführt. Wenn entweder / etc / profile oder .bash_profile Befehle verwendet, die das Vorhandensein eines Terminals voraussetzen (z. B. "fortune" oder "stty"), schlagen diese Befehle möglicherweise fehl. Dies ist der Hauptgrund, warum xdm diese Dateien standardmäßig nicht liest. Wenn Sie diesen Ansatz verwenden möchten, müssen Sie sicherstellen, dass alle Befehle in Ihren "Punktedateien" sicher ausgeführt werden können, wenn kein Terminal vorhanden ist.
-n "$BASH_VERSION"
sollte es außerhalb von Bash wahr sein?