So lassen Sie den UNIX-Befehl „set“ nur Umgebungsvariablen drucken

So lassen Sie den UNIX-Befehl „set“ nur Umgebungsvariablen drucken

Ich bin es gewohnt, dass der Bash- setBefehl nur eine Liste der Umgebungseinstellungen auflistet, z. B. PATH und dergleichen.

Auf einem Ubuntu-System, das ich gerade eingerichtet habe, werden bei der Ausführung jedoch set2000 Textzeilen ausgegeben, darunter viele Funktionen wie diese:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

Wie drucke ich nur die Umgebungsvariablen?

Antwort1

Standardmäßig setwird dasShell-Variablen, nicht nur die Umgebungsvariablen. In bashFunktionen werden Teilvariablen betrachtet. Siehehttps://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference.

Wenn Sie envoder verwenden, printenvwird dasUmfeldin Kindprozesse exportiert, was nichtNotwendigdas gleiche wie Ihre bashUmgebung:

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

Die Bash declareund typesetBuilt-Ins können alle Variablentypen auflisten, um Funktionen wegzulassen:

declare -F

Die Ausgabe davon ist in einem Format, das für die Wiederherstellung des Status in einem Shell-Skript geeignet ist, daher ist sie etwas ausführlich, obwohl Sie zwischen Arrays, Integern und anderen Typen unterscheiden können (je nach Version). Siehe auch die Ausgabe von export -p.

Und vonhttps://stackoverflow.com/questions/1305237/wie-man-im-script-in-bash-Variablen-auflistet Sie können Bash anweisen, den POSIX-Modus zu verwenden und setsich „richtig“ zu verhalten:

( set -o posix ; set ) 

Dies wird in einer Subshell ausgeführt, sodass Ihre laufende Shell nicht geändert wird, und es nimmt Variablen korrekt auf, die noch nicht in die geerbte Umgebung exportiert wurden.

Antwort2

Wenn Sie alle Umgebungsvariablen auflisten möchten, geben Sie einfach ein env.

verwandte Informationen