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.
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
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
$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