sobota, 26 czerwca 2010

Zmienne środowiskowe

Jak podaje Wikipedia, zmienne środowiskowe to zbiór dynamicznych wartości, wpływających na sposób w jaki działać będą uruchomione procesy (programy). Zmienne systemowe występują w każdym systemie operacyjnym Unix, Unix-like oraz MS DOS i Windows. Oczywiście różne systemy korzystać będą z różnych zbiorów zmiennych, jednak najczęściej większość zmiennych będzie wspólna.
Początkujący użytkownicy bardzo często boją się korzystać ze zmiennych systemowych w obawie przed uszkodzeniem systemu, traktując je jako rzecz nie do ogarnięcia. Oczywiście jest to podejście jak najbardziej błędne. Bash pozwala również na tworzenie tzw. zmiennych powłoki, które działają na zasadzie identycznej jak zmienne środowiskowe przy czym ich zasięg dotyczy tylko powłoki, w której zostały utworzone.

1. Niektóre zmienne środowiskowe

Zmienna Opis
PATH Zmienna zawiera oddzieloną dwukropkami listę katalogów w której, powłoka będzie szukać programu którego nazwę do wykonania wprowadził użytkownik, jeżeli taki program nie zostanie znaleziony, powłoka wyświetli komunikat “polecenie nie odnalezione”
EDITOR Domyślny edytor tekstu, zmienna wykorzystywana przez niektóre programy np. przez klienta poczty mutt. W jego przypadku emaile edytowane są w programie określonym przez tę zmienną
SHELL Powłoka wykorzystywana przez użytkownika
USER Nazwa użytkowanika
SHLVL Liczba uruchomionych powłok
TERM Domyślnie uruchamiany emulator terminala
HOME Domyślna ścieżka do katalogu domowego użytkownika
UID Unikalny liczbowy identyfikator zalogowanego użytkownika
$LANG, $LC_ALL Zmienne przechowujące ustawienia językowe (locale)

2. Wyświetlanie wartości zmiennej

Aby wyświetlić wartość jaką ma dana zmienna, używamy znanego już polecenia echo $zmienna.

adam@laptop:~$ echo $USER $UID $SHELL $HOME
adam 1000 /bin/bash /home/adam

Aby wyświetlić wszystkie używane zmienne, można użyć polecenia env. W poniższym przykładzie pokazany jest tylko fragment bardzo długiego wyjścia. Alternatywnie można użyć wbudowanego w basha polecenia set.

adam@laptop:~$ env
SSH_AGENT_PID=5605
TERM=xterm
DESKTOP_STARTUP_ID=
SHELL=/bin/bash
GTK_RC_FILES=/etc/gtk/gtkrc:/home/adam/.gtkrc-1.2-gnome2
WINDOWID=58896938
GTK_MODULES=gail:atk-bridge
USER=adam
USERNAME=adam
DESKTOP_SESSION=gnome
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/home/adam
LANG=pl_PL.UTF-8
GDMSESSION=gnome
HOME=/home/adam
SHLVL=2
LOGNAME=adam

3. Tworzenie nowych zmiennych

Nową zmienną tworzy się wpisując jej nazwę i wartość jaką będzie ona miała. Na przykład zmienna=wartość. Zmienne są czułe na wielkość liter, tak więc ZMIENNA nie będzie tym samym co zmienna pisana małymi literami. Zwyczajowo przyjęło się pisać nazwy zmiennych wielkimi literami.

adam@laptop:~$ ZMIENNA=wartość
adam@laptop:~$ echo $ZMIENNA
wartość

Utworzona powyżej zmienna powłoki ma pewną nieprzyjemną cechę, mianowicie dostępna będzie jedynie w powłoce, w której została utworzona, a programy uruchomione z tej powłoki, nie będą miały do niej dostępu. Aby obejść to ograniczenie, należy wyeksportować zmienną za pomocą polecenia export.

adam@laptop:~$ ZMIENNA=wartość
adam@laptop:~$ ZMIENNA2=wartość2
adam@laptop:~$ export $ZMIENNA2
adam@laptop:~$ export ZMIENNA2
adam@laptop:~$ bash #uruchamiam nową powłokę
adam@laptop:~$ echo $ZMIENNA1 $ZMIENNA2
wartość2

W powyższym przykładzie wyeksportowałem tylko jedną zmienną, jej wartość jest dostępna w nowo uruchomionej powłoce.

3. Zapamiętywanie wartości zmiennej

Wszystkie nowo utworzone zmienne, zarówno te wyeksportowane jak i niewyeksportowane, będą dostępne tak długo, jak użytkownik będzie zalogowany. Aby zmienna dostępna była po ponownym zalogowaniu się, należy dodać ją do ukrytego pliku .profile. Jeżeli zmienna ma być dostępna dla każdego użytkownika systemu, należy dodać ją do pliku /etc/profile. Oto przykładowa linia z pliku .profile (konfiguracja serwera anoncvs do pobierania plików źródłowych systemu NetBSD).

export CVSROOT=anoncvs@anoncvs.netbsd.org:/cvsroot

4. Usuwanie zmiennych

Aby usunąć zmienną, należy użyć polecenia unset.

adam@laptop:~$ ZMIENNA=wartość
adam@laptop:~$ echo $ZMIENNA
wartość
adam@laptop:~$ unset ZMIENNA
adam@laptop:~$ echo $ZMIENNA

Brak komentarzy:

Prześlij komentarz