Jest to decyzja podjęta przez Debiana. Uzasadnienie tego wyjaśniono w tym bardzo ładnym poście na wiki , którego fragment jest fragmentem. Podsumowanie jest następujące: „aby upewnić się, że logowanie GUI i logowania inne niż GUI działają w ten sam sposób”:
Weźmy xdm jako przykład. Pierre pewnego dnia wraca z wakacji i odkrywa, że jego administrator systemu zainstalował xdm w systemie Debian. Loguje się dobrze, a xdm czyta swój plik .xsession i uruchamia fluxboksa. Wszystko wydaje się być w porządku, dopóki nie pojawi się komunikat o błędzie w niewłaściwych lokalizacjach! Ponieważ zastępuje zmienną LANG w swoim .bash_profile, a ponieważ xdm nigdy nie czyta .bash_profile, jego zmienna LANG jest teraz ustawiona na en_US zamiast fr_CA.
Teraz naiwnym rozwiązaniem tego problemu jest to, że zamiast uruchamiać „xterm”, mógłby skonfigurować swojego menedżera okien, aby uruchamiał „xterm -ls”. Ta flaga informuje xterm, że zamiast uruchamiać normalną powłokę, powinna uruchomić powłokę logowania. W tej konfiguracji xterm spawnuje się / bin / bash, ale wstawia „- / bin / bash” (lub może „-bash”) w wektorze argumentów, więc bash działa jak powłoka logowania. Oznacza to, że za każdym razem, gdy otworzy nowy xterm, będzie czytał / etc / profile i .bash_profile (wbudowane zachowanie bash), a następnie .bashrc (ponieważ .bash_profile tak mówi). Na początku może się wydawać, że działa dobrze - jego pliki kropek nie są duże, więc nawet nie zauważa opóźnienia - ale jest bardziej subtelny problem. Uruchamia także przeglądarkę internetową bezpośrednio z menu Fluxboksa, a przeglądarka internetowa dziedziczy zmienną LANG z fluxboksa, która jest teraz ustawiona na niewłaściwe ustawienia regionalne. Więc chociaż jego Xtermy mogą być w porządku, a wszystko, co uruchamia się z jego Xtermów, może być w porządku, jego przeglądarka internetowa wciąż podaje mu strony w niewłaściwych lokalizacjach.
Więc jakie jest najlepsze rozwiązanie tego problemu? Naprawdę nie ma uniwersalnego. Lepszym rozwiązaniem jest zmodyfikowanie pliku .xsession, aby wyglądał mniej więcej tak:
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox
Powoduje to, że powłoka interpretująca skrypt .xsession odczytuje w / etc / profile i .bash_profile, jeśli istnieją i są czytelne, przed uruchomieniem xmodmap lub xterm lub „uruchomieniem” menedżera okien. Istnieje jednak jedna potencjalna wada tego podejścia: pod xdm powłoka odczytująca .xsession działa bez terminala sterującego. Jeśli albo / etc / profile lub .bash_profile używa komend, które zakładają obecność terminala (takich jak „fortuna” lub „stty”), te komendy mogą się nie powieść. Jest to główny powód, dla którego xdm domyślnie nie czyta tych plików. Jeśli zamierzasz zastosować to podejście, musisz upewnić się, że wszystkie polecenia w „plikach kropkowych” są bezpieczne do uruchomienia, gdy nie ma terminala.
-n "$BASH_VERSION"
być prawdą poza bashiem?