environ(7)

NAZWA
environ - środowisko użytkownika

SKŁADNIA
extern char **environ;

OPIS
Zmienna environ wskazuje na tablicę łańcuchów zwaną "środowiskiem". Ostatni wskaźnik w tej tablicy musi mieć wartość NULL. Ta tablica łańcuchów udostępniana jest procesowi przez funkcję execve(2) podczas uruchamiania nowego programu. Gdy proces potomny jest tworzony przez fork(2), dziedziczy copy ze środowiska swojego rodzica.

Zgodnie z konwencją, łańcuch w environ ma postać „nazwa=wartość”. Nazwa jest wrażliwa na wielkość liter i nie może zawierać znaku równości „=”. Wartość może być wszystkim co można zapisać jako łańcuch tekstowy. Nazwa i wartość nie mogą zawierać bajtu zerowego („\0”), gdyż służy on do zakończenia łańcucha.

Zmienne środowiskowe mogą być umieszczane w środowisku powłoki poleceniem export w sh(1) lub setenv jeśli korzysta się z csh(1).

Na początkowe środowisko powłoki ma wpływ wiele czynników, takich jak definicje z /etc/environment przetwarzane dla wszystkich użytkowników przy logowaniu przez pam_env(8) (w systemach korzystających z pam(8)). Dodatkowo wiele inicjalizacyjnych skryptów powłoki, takich jak systemowy skrypt /etc/profile i skrypty inicjalizacyjne użytkowników mogą zawierać polecenia dodające zmienne do środowiska powłoki; proszę zapoznać się z podręcznikiem systemowym swojej powłoki, aby dowiedzieć się więcej.

Powłoki wzorowane na powłoce Bourne'a obsługują składnię

    NAZWA=wartość polecenie

aby zdefiniować zmienną środowiskową wyłącznie w zakresie procesu wykonującego polecenie. Przed poleceniem można podać wiele definicji, oddzielonych białym znakiem.

W środowisku mogą być również umieszczane argumenty w momencie wykonywania funkcji exec(3). Program napisany w C może manipulować środowiskiem za pomocą funkcji getenv(3), putenv(3), setenv(3) i unsetenv(3).

Poniżej przedstawiono listę zmiennych środowiskowych występujących zwykle w systemie. Jest niekompletna i zawiera wyłącznie powszechne zmienne spotykane na co dzień przez przeciętnego użytkownika. Zmienne środowiskowe przypisane określonemu programowi lub funkcji bibliotecznej opisano w rozdziale ŚRODOWISKO właściwego podręcznika systemowego.

USER
    Nazwa zalogowanego użytkownika (wykorzystywana przez niektóre programy wywodzące się z BSD). Ustawiana przy logowaniu; zob. poniższy rozdział UWAGI.

LOGNAME
    Nazwa zalogowanego użytkownika (wykorzystywana przez niektóre programy wywodzące się z Systemu V). Ustawiana przy logowaniu; zob. poniższy rozdział UWAGI.

HOME
    Katalog domowy użytkownika. Ustawiany przy logowaniu; zob. poniższy rozdział UWAGI.

LANG
    Nazwa ustawień językowych, jaka ma być stosowana dla wszystkich kategorii ustawień, jeśli nie zostały narzucone przez zmienną środowiskową, taką jak LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC i LC_TIME (zob. locale(7) aby dowiedzieć się więcej o zmiennych LC_*).

PATH
    Sekwencja przedrostków katalogów używanych przez sh(1) i wiele innych programów przy wyszukiwaniu pliku wykonywalnego podanego jako zwykła nazwa pliku (tj. którego ścieżka nie zawiera ukośników). Przedrostki są oddzielone dwukropkami (:). Lista przedrostków jest przeszukiwana od początku do końca, poprzez sprawdzenie ścieżki tworzonej przez złączenie przedrostka, ukośnika i nazwy pliku, dopóki nie odnajdzie się plik wykonywalny.

    Dla zapewnienia kompatybilności, przedrostek zerowy (określony jako dwa złączone dwukropki lub dwukropek rozpoczynający lub kończący) jest interpretowany jako bieżący katalog roboczy. Takie użycie jest przestarzałe, a POSIX zaznacza, że zgodne z nim aplikacje powinny używać jawnej ścieżki (np. .) do określenia bieżącego katalogu roboczego.

    Podobnie jak PATH, CDPATH jest używane przez niektóre powłoki do poszukiwania katalogu docelowego dla polecenia zmiany katalogu, MANPATH jest używane przez man(1) do poszukiwania stron podręcznika itd.

PWD Bezwzględna ścieżka do bieżącego katalogu roboczego, musi być częściowo kanoniczna (bez składowych . lub ..).

SHELL
    Absolutna ścieżka do powłoki logowania użytkownika. Ustawiana przy logowaniu, zob. rozdział UWAGI poniżej.

TERM
    Rodzaj terminala, dla którego system ma przygotowywać wyjście.

PAGER
    Preferowane przez użytkownika narzędzie do wyświetlania plików tekstowych. Poprawny będzie każdy łańcuch akceptowany jako argument do polecenia sh -c. Jeśli PAGER jest pusta lub nieustawiona, aplikacje skorzystają z domyślnego programu takiego jak less(1) lub more(1).

EDITOR/VISUAL
    Preferowane przez użytkownika narzędzie do edycji plików tekstowych. Poprawny będzie każdy łańcuch akceptowany jako argument do polecenia sh -c.

Trzeba zauważyć, że obecność lub wartości pewnych zmiennych środowiska mają wpływ na zachowanie wielu programów i funkcji bibliotecznych. Oto przykłady:

•   Zmienne LANG, LANGUAGE, NLSPATH, LOCPATH, LC_ALL, LC_MESSAGES, itd. wpływają na obsługę ustawień językowych, zob. catopen(3), gettext(3) i locale(7).

•   TMPDIR wpływa na prefiks ścieżki w nazwach tworzonych przez tempnam(3) i inne funkcje oraz katalog tymczasowy wykorzystywany przez sort(1) i inne programy itd.

•   LD_LIBRARY_PATH, LD_PRELOAD i inne zmienne LD_* wpływają na zachowanie programu ładującego/konsolidatora bibliotek dynamicznych. Zob. też ld.so(8).

•   POSIXLY_CORRECT powoduje, że niektóre programy i funkcje biblioteczne przestrzegają zaleceń POSIX.

•   Na zachowanie malloc(3) wpływają zmienne MALLOC_*.

•   Zmienna HOSTALIASES określa nazwę pliku zawierającego aliasy, z których ma korzystać gethostbyname(3).

•   TZ i TZDIR podają informacje o strefie czasowej wykorzystywaną przez tzset(3) i przez funkcje takie jak ctime(3), localtime(3), mktime(3), strftime(3). Zobacz także tzselect(8).

•   TERMCAP podaje informacje o tym, jak adresować określony terminal (lub podaje nazwę pliku zawierającego te informacje).

•   COLUMNS i LINES mówią aplikacjom o rozmiarze okna, ewentualnie narzucając wartości inne niż rzeczywiste rozmiary.

•   PRINTER lub LPDEST mogą określać drukarkę, która powinna być używana. Zobacz lpr(1).

UWAGI
Historycznie i w zgodności ze standardem, environ musi być zadeklarowane w programie użytkownika. Jednak dla wygody programisty environ jest (niestandardowo) deklarowane w nagłówku pliku <unistd.h> jeśli zdefiniowane jest testowe makro _GNU_SOURCE (zob. feature_test_macros(7)).

Operacje PR_SET_MM_ENV_START i PR_SET_MM_ENV_END prctl(2) mogą posłużyć do kontroli położenia środowiska procesu.

Zmienne HOME, LOGNAME, SHELL i USER są ustawiane gdy dochodzi do zmiany użytkownika, za pomocą interfejsu zarządzania sesją, zwykle przez program typu login(1), na takiego z bazy danych użytkowników (np. passwd(5)). Przełączenie na użytkownika root za pomocą su(1) może skutkować mieszanym środowiskiem, gdy LOGNAME i USER pochodzą jeszcze od starego użytkownika; zob. stronę podręcznika systemowego su(1).

USTERKI
Oczywiście istnieje tu ryzyko naruszenia bezpieczeństwa. Wiele poleceń systemowych zostało oszukanych w celu wyrządzenia szkody przez użytkownika, który nadał nietypowe wartości zmiennym IFS lub LD_LIBRARY_PATH.

Istnieje również ryzyko skażenia przestrzeni nazw. Programy takie jak make i autoconf pozwalają na nadpisywanie domyślnych nazw programów narzędziowych poprzez środowisko zawierające zmienne o nazwach podobnych do nazw tych programów, ale składających się wyłącznie z wielkich liter. Zatem używa się CC do określenia pożądanego kompilatora C (i podobnie MAKE, AR, AS, FC, LD, LEX, RM, YACC itd.). Jednakże, w niektórych tradycyjnych zastosowaniach, takie zmienne środowiskowe podają opcje dla programów zamiast ścieżki. Zatem mamy MORE i LESS. Takie zastosowanie jest traktowane jako błędne i należy go unikać w nowych programach.

ZOBACZ TAKŻE
bash(1), csh(1), env(1), login(1), printenv(1), sh(1), su(1), tcsh(1), execve(2), clearenv(3), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3), locale(7), ld.so(8), pam_env(8)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.