Zmienne środowiskowe służą nie tylko preferencjom użytkownika. Są to ogólny mechanizm przekazywania różnorodnych informacji o ustawieniach od procesu nadrzędnego do procesów potomnych, które uruchamia.
Istnieje wiele przypadków, w których proces ustawia określone zmienne środowiskowe, aby wpływać tylko na procesy, które uruchamia. Na przykład skrypt może celowo zresetować ustawienia regionalne dla poleceń, które uruchamia, tak aby mógł przeanalizować dane wyjściowe z nich. Skrypty kompilacji dla wielu dużych pakietów oprogramowania używają zagnieżdżonych wywołań make
tej współrzędnej za pomocą zmiennych środowiskowych. Specjalistyczne narzędzia mogą potrzebować zmiany warunków pracy innych programów, które uruchamiają, wykonując sztuczki za pomocą $ LD_PRELOAD lub $ PATH.
Jeśli coś użytkownik zrobi w innym oknie, podczas gdy długa kompilacja jest uruchomiona w innym, po prostu magicznie zmieni zmienne środowiskowe wszystkich swoich procesów za ich plecami, spowoduje szaleństwo i chaos.
Inne zmienne środowiskowe zawierają informacje o konkretnej sesji, w której uruchamiany jest proces. Programy oczekują od $ TERM opisu zestawu poleceń określonego terminala (lub emulatora terminala), z którym są połączone; sprawiając, że ogólne ustawienie dla poszczególnych użytkowników uniemożliwiłoby zalogowanie się do tego samego systemu z kilkoma różnymi rodzajami terminali. Nawet jeśli masz tylko jeden element terminala i nigdy nie logujesz się zdalnie, programy takie jak np. screen
Ustawiają inny $ TERM dla procesów uruchamianych w ich sesji.
Lepszym pytaniem byłoby, dlaczego używamy mechanizmu komunikacji międzyprocesowej dla ustawień preferencji użytkownika, a nie bazy danych dla poszczególnych użytkowników?
Odpowiedź: Ponieważ to działa wystarczająco dobrze i korzyści z dokonywania bazy danych dla każdego użytkownika nie są na tyle duże, że praca zmienia wszystko w użyciu że zamiast zmiennych środowiskowych byłoby zrobić.
(Mogę wymyślić bardzo niewiele ustawień preferencji, w których nie byłoby przypadków użycia, w których wygodnie byłoby je zmienić tylko na przykład w celu wykonania pojedynczego skryptu. Aby nie utracić funkcjonalności, wszystko musiałoby zostać zastąpione przez zmienne środowiskowe, co powoduje dodatkową złożoność i bardziej zdezorientowanych użytkowników).
To nie tak, że alternatywy nie istnieją . Na przykład zasoby X są na sesję wyświetlania, a nie na proces. Są one jednak trudno dostępne dla programów wiersza polecenia - a programy wiersza polecenia zwykle muszą działać dla zdalnych loginów, które nie mają nawet serwera X, z którym można się połączyć.