W terminalu bash dla Linuksa często ustawianych jest wiele zmiennych środowiskowych, takich jak $PATH
i $HOME
.
Czy można zobaczyć wszystkie ustawione zmienne środowiskowe? W jaki sposób?
environment-variables
Cory Klein
źródło
źródło
Odpowiedzi:
TL; DR: użyj
(set -o posix ; set)
Zgodnie z instrukcją Bash możesz użyć
set
wbudowanej komendy, aby wyświetlić wszystkie ustawione zmienne środowiskowe .set
Komenda 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.
@RedGrittyBrick i @iglvzx zasugerowały użycie
env
polecenia, jednak to polecenie nie zapewni pełnej listy zmiennych środowiskowych.env
pokaże tylko zmienne oznaczone do eksportu. Porównaj wynikienv | sort
iexport -p
zobaczysz, 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
env
jest to osobny plik wykonywalny, w przeciwieństwie doset
wbudowanego 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ń.
Zobaczysz, że
set
zapewnia wyjście, podczas gdyenv
nie.źródło
env
Polecenia 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.źródło
printenv
, gdyż obieenv
iset
mieć inne funkcje niż tylko wyprowadzanie środowiska.env
wypisze tylko listę zmiennych środowiskowych, które zostały oznaczone do eksportu. Nie wydrukuje wszystkich zmiennych.wypisuje zmienne powłoki (ale nie wartości).
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
źródło
compgen -e
jest dokładnie tym, czego chciałem!