In einem Linux-Bash-Terminal sind oft viele Umgebungsvariablen wie $PATH
und festgelegt $HOME
.
Ist es möglich, alle Umgebungsvariablen anzuzeigen, die festgelegt wurden? Wie?
environment-variables
Cory Klein
quelle
quelle
Antworten:
TL; DR: verwenden
(set -o posix ; set)
Laut Bash-Handbuch können Sie den
set
eingebauten Befehl verwenden, um alle Umgebungsvariablen anzuzeigen , die festgelegt wurden. Derset
Befehl zeigt auch die Definitionen aller Funktionen an. Wenn Sie nur die Variablen und nicht die Funktionen anzeigen möchten, können Sie den POSIX-Modus aktivieren, bevor Sie den Befehl set ausführen. Der einfachste Weg, dies zu tun, ist mitset -o posix
, aber der POSIX-Modus bleibt eingeschaltet, bis Sie ihn mit ausschaltenset +o posix
.Daher zeigt der folgende Befehl alle definierten Umgebungsvariablen mithilfe einer Subshell an, ohne die POSIX-Kompatibilität in Ihrer aktuellen Shell zu beeinträchtigen.
@RedGrittyBrick und @iglvzx schlugen vor, den
env
Befehl zu verwenden. Dieser Befehl enthält jedoch keine vollständige Liste der Umgebungsvariablen.env
zeigt nur die Variablen an, die für den Export markiert wurden. Vergleichen Sie die Ausgabe vonenv | sort
undexport -p
und Sie werden sehen, was ich meine. Sie können ausführen,comm -23 <(set -o posix; set) <(env|sort)
wenn Sie sehen möchten, welche Umgebungsvariablen nicht exportiert werden.Der Grund für die Diskrepanz ist, dass
env
es sich um eine separate ausführbare Dateiset
handelt und nicht um einen in die Shell integrierten Befehl. Wenn ein Befehl ausgeführt wird, der kein in die Shell integrierter Befehl oder eine Funktion ist, empfängt er laut Bash-Handbuch nur Umgebungsvariablen, die für den Export in Bash markiert wurden . Es gibt viele Variablen, die nicht exportiert werden. Wenn Sie alle Variablen anzeigen möchten, die Ihre Shell definiert hat, müssen Sie denset
Befehl wie im Handbuch angegeben verwenden.Sie können dieses Verhalten mit den folgenden Befehlen einfach selbst testen.
Sie werden sehen, dass
set
die Ausgabe erfolgt, währendenv
dies nicht der Fall ist.quelle
Der
env
Befehl ohne Argumente gibt eine Liste der "exportierten" Umgebungsvariablen und ihrer Werte aus. Diese Variablen werden für Unterprozesse sichtbar gemacht - viele andere Umgebungsvariablen werden hier nicht angezeigt und nur in der laufenden Shell verwendet, z. B. zur Konfiguration.quelle
printenv
da beideenv
undset
habe andere Funktionen als nur die Ausgabe der Umgebung.env
druckt nur eine Liste der Umgebungsvariablen, die für den Export markiert wurden. Es werden nicht alle Variablen gedruckt.Gibt Shell-Variablen aus (aber nicht die Werte).
druckt exportierte Variablen, dh diejenigen, die von Prozessen geerbt werden, die diese Shell startet (aber nicht deren Werte).
Unterschied zwischen Shell- und exportierten Variablen: https://unix.stackexchange.com/questions/3507/differenz zwischen-Umgebungsvariablen-und-exportierten-Umgebungsvariablen-in-b ?rq=1
quelle
compgen -e
ist genau das was ich wollte!