Wie liste ich alle Variablennamen und ihre aktuellen Werte auf?
Und zwar nicht nur $HOME
, $PWD
usw. , aber andere haben Sie definiert.
command-line
bash
environment-variables
Strapakowsky
quelle
quelle
Antworten:
Für Bash: (die Standard-Shell in Ubuntu)
Geben Sie den folgenden Befehl in ein Terminal ein, um alle Umgebungsvariablen zu drucken:
Weitere Informationen zu diesem Befehl finden Sie in der
printenv
Manpage .Um eine Liste mit den "Shell-Variablen" anzuzeigen, geben Sie den folgenden Befehl ein:
Dies zeigt Ihnen nicht nur die Shell-Variablen, sondern auch die Umgebungsvariablen.
Weitere Informationen zu diesem Thema finden Sie unter:
Für zsh: (eine erweiterte Shell)
Verwenden Sie den folgenden Befehl:
Weitere Informationen zu ZSH-Optionen finden Sie auf der
zshoptions
Manpage .quelle
MYNEWVARIABLE=Ubuntu
und ausführe, wirdprintenv
es dort nicht angezeigt. Warum ist das so und wie zeigen sich diese anderen?export MYNEWVARIABLE=Ubuntu
und es wird so funktionieren, wie Sie es erwarten.set
, wird auch die von Ihnen erstellte Variable aufgelistet. Oder tunset | grep myvar
printenv
ist ein externer Befehl, der nur exportierte Umgebungsvariablen kennt (und druckt).set
ist ein interner Bash-Befehl, der alle "Shell-Variablen" (nicht exportierte Umgebungsvariablen) sowie die exportierten Umgebungsvariablen anzeigt.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, aber das wirdunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
und das wirdunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. Beim Exportieren heißt es: "Die von mir festgelegte Variable sollte Teil der Umgebung sein, die an Prozesse übergeben wird, und nicht nur eine Variable in dieser Shell." Mein drittes Beispiel besagt: "Die Variable sollte Teil der Umgebung sein, die an DIESEN Prozess übergeben wird, aber nicht danach hängenbleiben."Ich weiß, dass diese Frage ziemlich alt und beantwortet ist, aber ich denke, ich kann ein paar nützliche Informationen hinzufügen.
In allen oben beschriebenen Methoden wird folgende Vorgehensweise vorgeschlagen:
env
, oderprintenv
oder was auch immerDas Problem dieser Lösungen besteht darin, dass Sie die Umgebungsvariablen der Shell sehen, die auf dem Terminal ausgeführt wird . Die Umgebungsvariablen, die einer Anwendung zur Verfügung stehen, werden beispielsweise nicht direkt von der grafischen Oberfläche ausgeführt.
Dies macht sich beispielsweise bemerkbar, wenn Sie die Umgebungsvariablen mit
~/.profile
oder.bashrc
oder.zshenv
(abhängig von Ihrer Shell) ändern - wie beim klassischen Hinzufügen von Verzeichnissen zum Pfad.Um zu sehen, welche Umgebungsvariablen für die Anwendung verfügbar sind, die direkt in der grafischen Umgebung gestartet wurde, können Sie Folgendes tun (in der Gnome-Shell gibt es sicher eine entsprechende Methode in allen anderen DEs):
xterm -e bash --noprofile --norc
(Oder, falls nicht
xterm
,gnome-terminal -- bash --noprofile --norc
--- danke an @Mike Nakis für den Kommentar).Sie haben jetzt ein Terminal mit einer Shell, die keine Umgebungsvariablen hinzugefügt hat. Hier können Sie
env
alle Umgebungsvariablen auflisten:Offensichtlich werden in der neuen Shell die Umgebungsvariablen von den Systemdateien hinzugefügt, aber diese Variablen sollten ohnehin (durch Vererbung) für alle Programme im System verfügbar sein.
Ich poste dies, weil ich diesen Trick zum vierten Mal erneut durchsuchen und meine
.pam_environment
Datei überprüfen muss . So, jetzt werde ich es schneller finden (und dabei hoffe ich, jemand anderem zu helfen ...)quelle
xterm -e bash --noprofile --norc
weil die Startdateien nicht gelesen und ausgeführt werden, wenn Ubuntu mit einer grafischen Oberfläche gestartet wird? Siehe askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Sie können alle Variablen mit dem
declare
eingebauten sehen.Wenn Sie nur an Umgebungsvariablen interessiert sind, verwenden Sie
Führen
help declare
Sie den Befehl aus, um die anderen Optionen anzuzeigen.quelle
POSIXLY_CORRECT=1 set
und es ist auch erwähnenswert , dassdeclare
istalias
(in diesem Zusammenhang) fürtypeset
, eine andere bash builtin.Um die Umgebungsvariablen im Terminal mit CTRL+ ALT+ Taufzulisten, können Sie den
env
Befehl verwenden.beispielsweise :
usw.
Ich hoffe, das hilft.
quelle
In der Bash mit compgen:
quelle
compgen -v | while read line; do declare -p $line; done
Die meisten Lösungen hier geben entweder nur Umgebungsvariablen aus oder haben den Nachteil, dass env oder (set -o posix; posix) keine Werte in syntaktischer Form ausgeben (versuchen Sie, die Variable A = $ 'a \ r \ nb' zu drucken ...). .
Hier ist eine Funktion, die alle Variablen, eine Variable pro Zeile, in der mit POSIX-Escapezeichen versehenen Form ausgibt:
Vielen Dank an @tmgoblin für den Hinweis auf die Verwendung von compgen -v.
quelle
env ist ein POSIX 7 Weg :
Beispielausgabe:
Es werden nur exportierte Variablen angezeigt: Nicht exportierte Variablen werden normalerweise nicht als "Umgebungsvariablen" betrachtet.
Ziehen Sie das vor
printenv
, was nicht POSIX ist. Beide scheinen dasselbe ohne Argumente zu tun: https://unix.stackexchange.com/questions/123473/was-ist-der- Unterschied-zwischen-env-und-printenvquelle
env
eine bessere Formatierung sichtbarer geworden, und ich hätte weitere Informationen hinzugefügt.Wenn Sie eine bestimmte Umgebungsvariable möchten, anstatt sie alle mit zu
printenv
drucken, können Sie sie beispielsweise folgendermaßen druckenecho "$PWD"
quelle
printenv listet nur exportierte Variablen auf, command+ alt+ $ ("\ e $": complete-variable) listet alle Variablen auf.
quelle