Frage Wie listet man alle Variablennamen und ihre aktuellen Werte auf?


Wie listet man alle Variablennamen und ihre aktuellen Werte auf?

Einschließlich nicht nur $HOME, $PWD usw., aber jede andere, die Sie definiert haben.


295
2018-03-30 00:36


Ursprung


superuser.com/questions/420295/ ... - Ciro Santilli 新疆改造中心 六四事件 法轮功


Antworten:


Geben Sie den folgenden Befehl in einem Terminal ein, um alle Umgebungsvariablen zu drucken:

printenv

Weitere Informationen zu diesem Befehl finden Sie in der printenv Man Seite.


Um eine Liste mit den "Shell-Variablen" anzuzeigen, können Sie den nächsten Befehl eingeben:

( set -o posix ; set ) | less

Dies wird dir zeigen nicht nur die Shell-Variablen, aber auch die Umgebungsvariablen.

Für weitere Informationen zu diesem Thema lesen Sie:


417
2018-03-30 01:21



Wenn ich zum Terminal gehe und schreibe MYNEWVARIABLE=Ubuntu und ausführen printenv Es zeigt sich nicht dort. Warum ist das so, und wie zeigen sich diese anderen? - Strapakowsky
Wahrscheinlich sehen Sie den Unterschied zwischen einer Shell-Variablen und einer Umgebungsvariablen. Versuchen export MYNEWVARIABLE=Ubuntu und es wird funktionieren wie du es erwartest. - Rmano
wenn Sie einfach ausführen setEs listet auch die von Ihnen erstellte Variable auf. Oder tu es set | grep myvar - Sergiy Kolodyazhnyy
printenv ist ein externer Befehl, der also exportierte Umgebungsvariablen nur kennt (und druckt). set ist ein interner bash-Befehl, der also alle "Shell-Variablen" (nicht exportierte Umgebungsvariablen) sowie die exportierten Umgebungsvariablen anzeigt. - Dan Pritts
Um @ Rmanos Antwort auf @Strapakowsky zu erweitern ... Das wird nicht funktionieren unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, aber das wird unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWund das wird unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. Beim Export heißt es: "Die Variable, die ich einstelle, sollte Teil der Umgebung sein, die an Prozesse übergeben wird, nicht nur eine Variable in dieser Shell." Mein drittes Beispiel sagt "die Variable sollte Teil der Umgebung sein, die an DIESEN Prozess übergeben wird, aber nicht danach bleiben." - Bruno Bronosky


Ich weiß, dass diese Frage ziemlich alt ist und beantwortet wird, aber ich denke, dass ich ein paar nützliche Informationen hinzufügen kann.

In allen oben beschriebenen Verfahren wird das vorgeschlagene Verfahren vorgeschlagen:

  • Starten Sie ein Terminal
  • Zeige die Umgebungsvariablen mit env, oder printenv oder Wasauchimmer

Das Problem dieser Lösungen besteht darin, dass Sie die Umgebungsvariablen sehen der Shell, die in das Terminal läuft. Die Umgebungsvariablen, die für eine Anwendungsausführung verfügbar sind, werden beispielsweise nicht direkt von der grafischen Oberfläche angezeigt.

Dies macht sich bemerkbar, wenn Sie z. B. Ihre ~/.profile, oder .bashrc, oder .zshenv (Abhängig von Ihrer Shell) um die Umgebungsvariablen zu ändern --- wie das klassische Hinzufügen von Verzeichnissen zum Pfad.

Um zu sehen, welche Umgebungsvariablen für die Anwendung direkt in der grafischen Umgebung verfügbar sind, können Sie Folgendes tun (in Gnome Shell bin ich mir sicher, dass es in allen anderen DE eine entsprechende Methode gibt):

  • Drücken Sie Alt-F2
  • Führe den Befehl aus xterm -e bash --noprofile --norc

Sie haben jetzt ein Terminal mit einer Shell, die keine Umgebungsvariablen hinzugefügt hat. Sie können verwenden env hier, um alle Ihre Umgebungsvariablen aufzulisten:

Example of the bare shell

Offensichtlich werden in der neuen Shell die Umgebungsvariablen von den Systemdateien hinzugefügt, aber diese Variablen sollten sowieso für alle Programme im System verfügbar sein (durch Vererbung).

Ich poste das, weil es das vierte Mal ist, dass ich diesen Trick noch einmal suchen muss, indem ich meine suche .pam_environment Datei. So, jetzt werde ich es schneller finden (und dabei hoffe ich, anderen zu helfen ...)


43
2017-10-12 00:37



Erfordert eine Desktop-Umgebung, die für CLI-only-Benutzer nicht geeignet ist. - K7AAY
Ja --- aber dann für CLI nur die vorherige Antwort ist in Ordnung. Ich habe nur darauf hingewiesen, dass Sie manchmal Umgebungsvariablen überprüfen müssen, die für Anwendungen verfügbar sind, die von der grafischen Umgebung gestartet wurden. Dies ist nicht die gleiche Menge, die Sie sehen, wenn Sie ein Terminal darin starten. Wenn Sie zum Beispiel versuchen zu verstehen, warum Ihre Kile App keine LaTeX-Datei kompilieren kann, während Sie in einem Terminal sind, hilft der Trick, den ich hier gepostet habe, sehr. - Rmano
Danke für eine sehr nützliche Antwort! Ich verlinkte es nur von help.ubuntu.com/community/... - Gunnar Hjalmarsson
Vielen Dank. Hast du es empfohlen? xterm -e bash --noprofile --norc weil die Startup-Dateien nicht gelesen und ausgeführt werden, wenn Ubuntu mit einer grafischen Oberfläche gestartet wird? Sehen askubuntu.com/q/1025845/1471 - Tim
@Tim im Grunde ist es nur eine Möglichkeit, eine Shell ohne mehr als die Umgebungsvariablen für die grafische Umgebung zu haben. Ein Standard-Terminal liest (oder liest) .bashrc beispielsweise... - Rmano


Sie können alle Variablen mit dem sehen declare eingebaut.

declare -p

Wenn Sie nur an Umgebungsvariablen interessiert sind, verwenden Sie

declare -xp

Lauf help declare um zu sehen, was die anderen Optionen sind.


32
2018-04-04 20:28



Das ist weit bessere Lösung als POSIXLY_CORRECT=1 set und es ist auch erwähnenswert, dass declare ist alias (in diesem Zusammenhang) für typeset, ein weiterer Bash eingebaut. - w17t


Um die Umgebungsvariablen im Terminal mit zu listen STRG+ALT+T Sie können verwenden env Befehl.

beispielsweise :

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

etc.

Ich hoffe, das hilft.


11
2018-03-30 16:41



Ich habe bemerkt, dass env einige Variablen o_O vermisst. speziell nach der Beschaffung einer VAR = VAL-Datei. - ThorSummoner
@ThorSummoner Die Antwort hier könnte helfen stackoverflow.com/questions/15474650/ ... - georaldc


In bash mit compgen:

compgen -v | while read line; do echo $line=${!line};done  

3
2018-04-11 20:53



Dies sollte die akzeptierte Antwort sein, da alle anderen mehr als nur den Namen selbst aufführen. In meinem Fall enthalten einige Variablen mehrzeilige Werte, was die anderen Lösungen nicht machbar macht. - Mene


env ist ein POSIX 7 Weg:

export asdf=qwer
env | grep asdf

Beispielausgabe:

asdf=qwer

Es zeigt nur exportierte Variablen an: Nicht exportierte Variablen werden normalerweise nicht als "Umgebungsvariablen" betrachtet.

Bevorzugen Sie das printenv, das ist nicht POSIX. Beide scheinen dasselbe ohne Argumente zu tun: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


2
2017-11-30 14:31



Bereits vor zwei Jahren erwähnt: askubuntu.com/a/276162/158442 - muru
@muru fair genug. Ich wünschte, es wäre gemacht env mehr sichtbar mit besserer Formatierung, und ich habe mehr Informationen hinzugefügt. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Das ist, was Bearbeitung ist für. - muru


Wenn Sie eine bestimmte Umgebungsvariable möchten, statt sie alle mit zu drucken printenvSie können es zum Beispiel ausdrucken echo "$PWD"


0
2018-01-08 14:13