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

31

W terminalu bash dla Linuksa często ustawianych jest wiele zmiennych środowiskowych, takich jak $PATHi $HOME.

Czy można zobaczyć wszystkie ustawione zmienne środowiskowe? W jaki sposób?

Cory Klein
źródło
1
askubuntu.com/questions/275965/…
Ciro Santilli 30 改造 中心 法轮功 六四 事件

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.

Rozgwiazda
źródło
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.

RedGrittyBrick
źródło
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