Jak mogę wyświetlić listę wszystkich zmiennych powłoki?

18

Czytając o tym pytaniu: w Zsh jak mogę wyświetlić listę wszystkich zmiennych środowiskowych? , Zastanawiałem się, jak mogę wyświetlić wszystkie zmienne powłoki ?

Czy rozróżnienie między zmiennymi powłoki a zmiennymi środowiskowymi dotyczy również powłok innych niż zsh?

Interesuje mnie przede wszystkim Bash i Zsh, ale wspaniale byłoby wiedzieć, jak to zrobić w innych powłokach głównego nurtu.

Josh
źródło

Odpowiedzi:

21

Wyświetl wszystkie zmienne powłoki

bash: use set -o posix ; set. Opcje POSIX mają na celu uniknięcie wyświetlania zbyt dużej ilości informacji, takich jak definicje funkcji. declare -pdziała również.

zsh : posługiwać się typeset

Zmienne powłoki i zmienne środowiskowe

Zmienna środowiskowa jest dostępna dla exec()procesów potomnych (jako kopia. Jeśli proces macierzysty zmieni zmienną, środowisko potomne nie zostanie zaktualizowane). Zmienna inna niż środowiskowa jest dostępna tylko dla bieżącej działającej powłoki i fork()podpartych -ed. To rozróżnienie występuje we wszystkich powłokach.

(uzupełnione dzięki komentarzom)

Uriel
źródło
declare -pzrób to samo
Costas
Pytanie ma również odpowiedź tutaj: stackoverflow.com/questions/1305237/…
Uriel
1
set -o posixnie istnieje w Zsh; setnie wyświetla definicji funkcji.
vinc17
1
set -o posixjest błędem składniowym większości powłok.
mikeserv
3
Zmienne powłoki są również dostępne w procesach potomnych. Różnica pojawia się, gdy proces potomny wykonuje nowy program: zmienne środowiskowe są przekazywane exec, a zmienne powłoki nie.
Barmar
7

Istnieje wiele alternatyw:

printenv

Wydrukuj wartości określonego środowiska VARIABLE (s). Jeśli nie zostanie podana ZMIENNA, wydrukuj pary nazwa i wartość dla nich wszystkich.

środowisko

env - uruchom program w zmodyfikowanym środowisku

eksport

Ustaw zmienną środowiskową. Zaznacz każdą nazwę do przekazania do procesów potomnych w środowisku .....

-p Wyświetl dane wyjściowe w formie, która może zostać ponownie wykorzystana jako dane wejściowe.

Jeśli nie podano żadnych nazw lub podano opcję `-p ', wyświetlana jest lista eksportowanych nazw.

zestaw

przydaje się również do uzyskiwania zmiennych powłoki.

Jeśli potrzebujesz dodatkowych informacji (liczba całkowita, wyeksportowana), powinieneś użyć

skład

Zaletą eksportu jest to, że jego dane wyjściowe można natychmiast wczytać z powrotem do powłoki.

Wreszcie jest

compgen -v

Wyświetl możliwe uzupełnienia w zależności od opcji.

który pokazuje wszystkie zmienne, powłokę i środowisko, bez ich wartości lub dodatkowych informacji. Musisz znaleźć echo $ VARIABLE_NAME, aby znaleźć wartość zmiennej. Ale przynajmniej lista jest kompletna. Należy do bash , nie zsh .

MariusMatutiae
źródło
1
exportnie ma żadnej przewagi set, przynajmniej jeśli chodzi o cytowanie o ponownym wejściu do powłoki. A printenvi envnie są w ogóle o zmiennych powłoki, choć to robić często pokrywają się ze zmiennych środowiskowych.
mikeserv
3

Za pomocą zshmożna użyć typeset, który daje więcej informacji niż setnp. Typ zmiennych. Nadal możesz filtrować dane wyjściowe za pomocą greplub sed, w zależności od tego, czego chcesz. Zmienne środowiskowe są oznaczone jak exportedna wyjściu.

vinc17
źródło