Question Comment lister tous les noms de variables et leurs valeurs actuelles?


Comment lister tous les noms de variables et leurs valeurs actuelles?

Y compris non seulement $HOME, $PWD etc mais tout autre que vous avez défini.


295
2018-03-30 00:36


origine


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


Réponses:


Entrez la commande suivante dans un terminal pour imprimer toutes les variables d'environnement:

printenv

Pour plus d'informations sur cette commande, lisez le printenv page de man.


Pour afficher une liste comprenant les "variables shell", vous pouvez entrer la commande suivante:

( set -o posix ; set ) | less

Cela vous montrera pas seulement les variables shell, mais aussi les variables d'environnement.

Pour plus d'informations sur ce sujet, lisez:


417
2018-03-30 01:21



Si je vais au terminal et écris MYNEWVARIABLE=Ubuntu et exécuter printenv ça ne se voit pas là. Pourquoi est-ce que, et comment ces autres apparaissent-ils? - Strapakowsky
Vous voyez probablement la différence entre une variable shell et une variable d'environnement. Essayer export MYNEWVARIABLE=Ubuntu et cela fonctionnera comme prévu. - Rmano
si vous exécutez simplement set, il répertorie également la variable créée par vous. Ou faire set | grep myvar - Sergiy Kolodyazhnyy
printenv est une commande externe, elle ne connaît donc que (et imprime) les variables d'environnement exportées. set est une commande interne bash, elle affiche donc toutes les "variables shell" (variables d'environnement non exportées) ainsi que les variables d'environnement exportées. - Dan Pritts
Pour élargir la réponse de @ Rmano à @Strapakowsky ... Cela ne fonctionnera pas unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, mais cela va unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, et cela va unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. L'exportation indique que "la variable que je mets doit faire partie de l'environnement transmis aux processus, et pas seulement une variable dans ce shell". Mon troisième exemple indique que "la variable doit faire partie de l’environnement qui est transmis à CE processus, mais qu’il ne restera pas après." - Bruno Bronosky


Je sais que cette question est assez ancienne et répondue, mais je pense que je peux ajouter quelques informations utiles.

Dans toutes les méthodes décrites ci-dessus, la procédure suggérée est la suivante:

  • lancer un terminal
  • montre les variables d'environnement en utilisant env, ou printenv ou peu importe

Le problème de ces solutions est que vous voyez les variables d'environnement du shell qui court dans le terminal. Vous ne voyez pas les variables d'environnement disponibles pour une application exécutée, par exemple, directement par l'interface graphique.

Cela se remarque si, par exemple, vous utilisez votre ~/.profile, ou .bashrc, ou .zshenv (en fonction de votre shell) pour modifier les variables d'environnement - comme l'ajout classique de répertoires au chemin.

Pour voir les variables d'environnement disponibles pour l'application démarrée directement dans l'environnement graphique, vous pouvez effectuer les opérations suivantes (dans Gnome Shell, je suis sûr qu'il existe une méthode équivalente dans tous les autres DE):

  • appuyez sur Alt-F2
  • lance la commande xterm -e bash --noprofile --norc

Vous avez maintenant un terminal avec un shell qui n'ajoute aucune variable d'environnement. Vous pouvez utiliser env ici pour lister toutes vos variables d'environnement:

Example of the bare shell

De toute évidence, le nouveau shell aura les variables d'environnement ajoutées par les fichiers système, mais ces variables devraient de toute façon être disponibles (par héritage) pour tous les programmes du système.

Je publie ceci parce que c’est la quatrième fois que je cherche à nouveau ce tour, vérifiant mon .pam_environment fichier. Alors maintenant je vais le trouver plus rapidement (et en même temps, j'espère aider quelqu'un d'autre ...)


43
2017-10-12 00:37



Nécessite que vous ayez un environnement de bureau, pas utile pour les utilisateurs du serveur CLI uniquement. - K7AAY
Oui --- mais pour CLI, seule la réponse précédente est correcte. Je voulais juste souligner que vous devez parfois vérifier les variables d’environnement disponibles pour les applications lancées par l’environnement graphique, ce qui n’est pas le même ensemble que lorsque vous démarrez un terminal. Par exemple, si vous essayez de comprendre pourquoi votre application Kile ne peut pas compiler un fichier LaTeX, alors que dans un terminal vous pouvez le faire, le truc que j'ai posté ici aidera beaucoup. - Rmano
Merci pour une réponse très utile! Je viens de le relier de help.ubuntu.com/community/… - Gunnar Hjalmarsson
Merci. Avez-vous recommandé xterm -e bash --noprofile --norc parce que les fichiers de démarrage ne sont pas lus et exécutés lorsque Ubuntu est démarré avec une interface graphique? Voir askubuntu.com/q/1025845/1471 - Tim
@Tim fondamentalement c'est juste un moyen d'avoir un shell sans autre chose que les variables d'environnement disponibles pour l'environnement graphique. Un terminal standard lit (ou relit) .bashrc par exemple... - Rmano


Vous pouvez voir toutes les variables avec le declare intégré.

declare -p

Si vous êtes uniquement intéressé par les variables d’environnement, utilisez

declare -xp

Courir help declare pour voir quelles sont les autres options.


32
2018-04-04 20:28



c'est loin d'être la solution POSIXLY_CORRECT=1 set et il est également digne de mention que declare est alias (dans ce contexte) pour typeset, une autre bash builtin. - w17t


Pour lister les variables d'environnement dans le terminal avec CTRL+ALT+T vous pouvez utiliser env commander.

par exemple :

[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.

J'espère que cela pourra aider.


11
2018-03-30 16:41



J'ai remarqué que env manque certaines variables o_O. spécifiquement après avoir trouvé un fichier VAR = VAL. - ThorSummoner
@ThorSummoner La réponse ici pourrait aider stackoverflow.com/questions/15474650/… - georaldc


En bash en utilisant compgen:

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

3
2018-04-11 20:53



Cela devrait être la réponse acceptée, car tous les autres énumèrent plus que le nom lui-même. Dans mon cas, certaines variables contiennent des valeurs multilignes qui rendent les autres solutions irréalisables. - Mene


env est un POSIX 7 voies:

export asdf=qwer
env | grep asdf

Sortie de l'échantillon:

asdf=qwer

Il ne montre que les variables exportées: les variables non exportées ne sont généralement pas considérées comme des "variables d'environnement".

Préfère que plus printenv, qui n'est pas POSIX. Les deux semblent faire la même chose sans arguments: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


2
2017-11-30 14:31



Déjà mentionné il y a deux ans: askubuntu.com/a/276162/158442 - muru
@muru assez juste. Souhaite avoir fait env plus visible avec un meilleur formatage, et j'ai ajouté plus d'informations. - Ciro Santilli 新疆改造中心 六四事件 法轮功
C'est ce que l'édition est pour. - muru


Si vous souhaitez une variable d’environnement spécifique plutôt que de tout imprimer avec printenv, vous pouvez par exemple l'imprimer en faisant echo "$PWD"


0
2018-01-08 14:13