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?
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?
Odpowiedzi:
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.
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.
printenv, gdyż obie envi setmieć inne funkcje niż tylko wyprowadzanie środowiska.
envwypisze tylko listę zmiennych środowiskowych, które zostały oznaczone do eksportu. Nie wydrukuje wszystkich zmiennych.
compgen -v
wypisuje zmienne powłoki (ale nie wartości).
compgen -e
wypisuje wyeksportowane zmienne, tj. dziedziczone przez procesy uruchamiane przez tę powłokę (ale nie ich wartości).
Różnica między zmiennymi powłoki a eksportowanymi zmiennymi: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
compgen -ejest dokładnie tym, czego chciałem!