Jak wyświetlić listę wszystkich aktualnie zdefiniowanych zmiennych środowiskowych w terminalu Linux Bash?


Odpowiedzi:


32

TL; DR: użyj(set -o posix ; set)


Zgodnie z instrukcją Bash możesz użyć setwbudowanej komendy, aby wyświetlić wszystkie ustawione zmienne środowiskowe . setKomenda będzie również wyświetlać definicje żadnej funkcji. Jeśli chcesz zobaczyć tylko zmienne, a nie funkcje, możesz włączyć tryb POSIX przed uruchomieniem polecenia set. Najłatwiej to zrobić za pomocą set -o posix, ale pozostawi włączony tryb POSIX, dopóki go nie wyłączyszset +o posix .

Dlatego poniższe polecenie pokaże wszystkie zdefiniowane zmienne środowiskowe za pomocą podpowłoki bez wpływu na zgodność z POSIX w bieżącej powłoce.

(set -o posix ; set)

@RedGrittyBrick i @iglvzx zasugerowały użycie envpolecenia, jednak to polecenie nie zapewni pełnej listy zmiennych środowiskowych. envpokaże tylko zmienne oznaczone do eksportu. Porównaj wyniki env | sorti export -pzobaczysz, co mam na myśli. Możesz uruchomić, comm -23 <(set -o posix; set) <(env|sort)jeśli chcesz zobaczyć, które zmienne środowiskowe nie są eksportowane.

Przyczyną rozbieżności jest to, że envjest to osobny plik wykonywalny, w przeciwieństwie do setwbudowanego polecenia powłoki. Zgodnie z instrukcją Bash, gdy zostanie wykonane polecenie, które nie jest wbudowanym poleceniem lub funkcją powłoki, otrzyma tylko zmienne środowiskowe, które zostały oznaczone do eksportu w Bash . Istnieje wiele zmiennych, które nie są eksportowane. Dlatego jeśli chcesz zobaczyć wszystkie zmienne zdefiniowane przez twoją powłokę, musisz użyćset polecenia podanego w instrukcji.

Możesz łatwo przetestować to zachowanie, korzystając z następujących poleceń.

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

Zobaczysz, że setzapewnia wyjście, podczas gdy envnie.


24

envPolecenia bez argumentów wypisze listę „eksportowanych” zmiennych środowiskowych i ich wartości. Te zmienne są widoczne dla podprocesów - wiele innych zmiennych środowiskowych nie jest z tym pokazanych i są używane tylko wewnątrz działającej powłoki, np. Do konfiguracji.


10
Wolę printenv, gdyż obie envi setmieć inne funkcje niż tylko wyprowadzanie środowiska.
iglvzx

3
envwypisze tylko listę zmiennych środowiskowych, które zostały oznaczone do eksportu. Nie wydrukuje wszystkich zmiennych.
Starfish

4
@ Starfish ma rację - oznacza to, że ta zaakceptowana odpowiedź była bardzo błędna. Zredagowano, by wyświetlać tylko wyeksportowane zmienne.
Volker Siegel

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.