Zmienne systemowe

Zmienne systemowe, często nazwane także zmiennymi środowiskowymi (ang.environment variables) - są zdefiniowane i przechowywane w środowisku nadrzędnym (powłoce z której uruchamiane są Twoje skrypty).

Ich nazwy są zwyczajowo tworzone z dużych liter i mogą być testowane poleceniem set. Definują środowisko użytkownika, dostępne dla wszystkich procesów potomnych.

Zmienne środowiskowe i ich zasięg

  • globalne - widoczne w każdym podshellu
  • lokalne - widoczne tylko dla tego shella w którym został ustawione

Aby bardziej uzmysłowić sobie różnicę między nimi zróbmy mały eksperyment: otwórz dowolny terminal (widoczny podshell) i wpisz:

x="napis"
echo $x
xterm
x="napis"    # zdefiniowałeś właśnie zmienną x, która ma wartość "napis"
echo $x      # wyświetli wartość zmiennej x
xterm        # wywołanie podshella

wpiszmy jeszcze raz:

echo $x       # nie pokaże nic, bo zmienne lokalne nie są widoczne w podshellach

Inicjacja zmiennych globalnych

export x="napis"

Teraz zmienna x będzie widoczna w podshellach, jak widać wyżej służy do tego polecenie export, nadaje ono wskazanym zmiennym atrybut zmiennych globalnych. Jeśli napiszesz samo export, opcjonalnie export -p uzyskasz listę aktualnie eksportowanych zmiennych. Na tej liście przed nazwą każdej zmiennej znajduje się zapis:

declare -x

To wewnętrzne polecenie BASH-a, służące do definiowania zmiennych i nadawania im atrybutów, -x to atrybut eksportu czyli jest to, to samo co polecenie export.

Ostrzeżenie

Polecenie declare występuje tylko w BASH-u, nie ma go w innych powłokach, natomiast export występuje w ksh, ash i innych, które korzystają z plików startowych /etc/profile. Zaleca się stosowanie polecenia export.

export -n zmienna

Spowoduje usunięcie atrybutu eksportu dla danej zmiennej

Wybrane przykłady zmiennych środowiskowych

  • $HOME - ścieżka do twojego katalogu domowego
  • $USER - twój login
  • $HOSTNAME - nazwa twojego hosta
  • $OSTYPE - rodzaj systemu operacyjnego
  • $UID - Unique User ID - unikalny numer użytkownika
  • $TERM - Typ terminala z jakiego korzystamy

I wiele, wiele innych wszystkie dostępne zmienne srodowiskowe można wyświetlić za pomoca polecenia:

printenv | less

Podpowiedź

W niektórych systemach nie istnieje polecenie printenv, można skorzystać z env.

Do zmiennych systemowych odwołujemy się identycznie jak do normalnych.

Definiując zmienne jako systemowe, należy upewnić się czy polecenie export udostępnienia zmienne powłokom potomnym (podshellom) :

bash$ SCRIPT_PATH=/usr/bin/skrypt.sh
bash$ export SCRIPT_PATH

Podpowiedź

Zauważ brak znaku $ przy korzystaniu z polecenia export!

Nowoczesne powłoki systemowe umożliwiają wykonywanie tego w jednej linii:

bash$ export SCRIPT_PATH=/usr/bin/skrypt.sh