Jak wyświetlić wszystkie nazwy zmiennych i ich bieżące wartości?
W tym nie tylko $HOME
, $PWD
etc, ale każdy inny już zdefiniowana.
command-line
bash
environment-variables
Strapakowsky
źródło
źródło
Odpowiedzi:
Dla bash: (standardowa powłoka w Ubuntu)
Wpisz następujące polecenie w terminalu, aby wydrukować wszystkie zmienne środowiskowe:
Aby uzyskać więcej informacji na temat tego polecenia, przeczytaj
printenv
stronę podręcznika man .Aby wyświetlić listę zawierającą „zmienne powłoki”, możesz wprowadzić następną komendę:
To pokaże nie tylko zmienne powłoki, ale także zmienne środowiskowe.
Aby uzyskać więcej informacji związanych z tym tematem, przeczytaj:
Dla zsh: (zaawansowana powłoka)
Użyj następującego polecenia:
Więcej informacji o opcjach ZSH znajduje się na
zshoptions
stronie man .źródło
MYNEWVARIABLE=Ubuntu
i wykonujęprintenv
, nie pokazuje się tam. Dlaczego tak jest i jak pojawiają się inni?export MYNEWVARIABLE=Ubuntu
i będzie działać zgodnie z oczekiwaniami.set
, wyświetli również zmienną utworzoną przez ciebie. Albo zróbset | grep myvar
printenv
jest poleceniem zewnętrznym, więc wie tylko o (i drukuje) wyeksportowane zmienne środowiskowe.set
jest wewnętrzną komendą bash, więc pokazuje wszystkie „zmienne powłoki” (niewymportowane zmienne środowiskowe), a także wyeksportowane zmienne środowiskowe.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, ale będzieunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
i tak będzieunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. Korzystanie z eksportu mówi: „zmienna, którą ustawiam, powinna być częścią środowiska przekazywanego do procesów, a nie tylko zmienną w tej powłoce”. Mój trzeci przykład mówi: „zmienna powinna być częścią środowiska, która jest przekazywana do TEGO procesu, ale nie powinna się później zmieniać”.Wiem, że to pytanie jest dość stare i odpowiedziałem, ale myślę, że mogę dodać trochę przydatnych informacji.
We wszystkich opisanych wyżej metodach sugerowana procedura to:
env
, lubprintenv
czy cokolwiekProblemem tych rozwiązań jest to, że widzisz zmienne środowiskowe powłoki, która działa na terminalu . Nie widzisz zmiennych środowiskowych dostępnych dla aplikacji, na przykład bezpośrednio przez interfejs graficzny.
Jest to zauważalne, jeśli na przykład używasz własnych
~/.profile
lub.bashrc
lub.zshenv
(w zależności od powłoki) do modyfikowania zmiennych środowiskowych - takich jak klasyczny dodatek katalogów do ścieżki.Aby zobaczyć zmienne środowiskowe dostępne dla aplikacji uruchomione bezpośrednio w środowisku graficznym, możesz wykonać następujące czynności (jestem pewien, że w Gnome Shell istnieje równoważna metoda we wszystkich innych DE):
xterm -e bash --noprofile --norc
(Lub, jeśli nie masz
xterm
,gnome-terminal -- bash --noprofile --norc
--- dzięki @Mike Nakis za komentarz).Masz teraz terminal z powłoką, która nie dodała żadnych zmiennych środowiskowych. Możesz użyć
env
tutaj, aby wyświetlić listę wszystkich zmiennych środowiskowych:Oczywiście nowa powłoka będzie miała zmienne środowiskowe dodane przez pliki systemowe, ale te zmienne powinny być dostępne (przez dziedziczenie) dla wszystkich programów w systemie.
Publikuję to, ponieważ po raz czwarty muszę ponownie przeszukać tę sztuczkę, sprawdzając mój
.pam_environment
plik. Teraz znajdę to szybciej (a przy okazji mam nadzieję, że pomogę komuś innemu ...)źródło
xterm -e bash --noprofile --norc
ponieważ pliki startowe nie są odczytywane i wykonywane po uruchomieniu Ubuntu z interfejsem graficznym? Zobacz askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Możesz zobaczyć wszystkie zmienne z
declare
wbudowanym.Jeśli interesują Cię tylko zmienne środowiskowe, użyj
Uruchom,
help declare
aby zobaczyć inne opcje.źródło
POSIXLY_CORRECT=1 set
i jest to również warto wspomnieć, żedeclare
jestalias
(w tym kontekście) dlatypeset
, innego wbudowanego polecenia bash.Aby wyświetlić listę zmiennych środowiskowych w terminalu za pomocą CTRL+ ALT+ T, możesz użyć
env
polecenia.na przykład :
itp.
mam nadzieję, że to pomaga.
źródło
W bash przy użyciu compgen:
źródło
compgen -v | while read line; do declare -p $line; done
Większość rozwiązań tutaj albo drukuje tylko zmienne środowiskowe, albo ma tę wadę, że env lub (set -o posix; posix) nie drukują wartości w postaci możliwej do przeanalizowania (spróbuj wydrukować zmienną A = $ 'a \ r \ nb' ...) .
Oto funkcja, która wypisze wszystkie zmienne, jedną zmienną na wiersz, w postaci zmiany znaczenia POSIX:
Dzięki @tmgoblin za wskazanie użycia compgen -v.
źródło
env to POSIX 7 sposób :
Przykładowe dane wyjściowe:
Pokazuje tylko wyeksportowane zmienne: nieeksportowane zmienne zwykle nie są uważane za „zmienne środowiskowe”.
Wolę to
printenv
, co nie jest POSIX. Oba wydają się robić to samo bez argumentów: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenvźródło
env
bardziej widoczne dzięki lepszemu formatowaniu, a ja dodałem więcej informacji.Jeśli chcesz określoną zmienną środowiskową, zamiast drukować je wszystkie za pomocą
printenv
, możesz na przykład wydrukować ją wykonującecho "$PWD"
źródło
printenv wyświetla tylko wyeksportowane zmienne, command+ alt+ $ („\ e $”: pełna-zmienna) wyświetla wszystkie zmienne.
źródło