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 środowiskowe można wyświetlić za pomoca polecenia:

printenv | less

Podpowiedź

W niektórych systemach nie istnieje polecenie printenv, można skorzystać z env. Dobrym miejscem, które opisuje większośc zmiennych jest Advanced Bash Scripting Guide.

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