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.
command-line
bash
environment-variables
Strapakowsky
la source
la source
Réponses:
Pour bash: (le shell standard sous Ubuntu)
Entrez la commande suivante dans un terminal pour imprimer toutes les variables d'environnement:
Pour plus d'informations sur cette commande, lisez la
printenv
page de manuel .Pour afficher une liste comprenant les "variables shell", vous pouvez entrer la commande suivante:
Cela vous montrera non seulement les variables shell, mais aussi les variables d'environnement.
Pour plus d'informations sur ce sujet, lisez:
Pour zsh: (un shell avancé)
Utilisez la commande suivante:
Pour plus d'informations sur les options ZSH, voir la
zshoptions
page de manuel .la source
MYNEWVARIABLE=Ubuntu
et exécuteprintenv
ça ne montre pas là. Pourquoi est-ce, et comment ces autres apparaissent-ils?export MYNEWVARIABLE=Ubuntu
et cela fonctionnera comme prévu.set
, il liste également la variable créée par vous. Ou faireset | grep myvar
printenv
est une commande externe, elle ne connait 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.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
, mais cela fonctionneraunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
et ce sera le casunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
. L'exportation indique "la variable que je suis en train de définir devrait faire partie de l'environnement qui est passé aux processus, pas seulement une variable de ce shell". Mon troisième exemple dit "la variable doit faire partie de l'environnement qui est transmis à THIS processus, mais ne doit pas rester après."Je sais que cette question est assez ancienne et a répondu, mais je pense pouvoir ajouter quelques informations utiles.
Dans toutes les méthodes décrites ci-dessus, la procédure suggérée est la suivante:
env
, ouprintenv
ou quoi queLe problème de ces solutions est que vous voyez les variables d'environnement du shell s'exécutant sur le terminal . Vous ne voyez pas les variables d'environnement disponibles pour une application s'exécuter, par exemple, directement par l'interface graphique.
Cela se remarque si, par exemple, vous utilisez votre
~/.profile
, ou.bashrc
, ou.zshenv
(selon 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ées directement dans l'environnement graphique, vous pouvez procéder comme suit (dans Gnome Shell, je suis sûr qu'il existe une méthode équivalente dans tous les autres DE):
xterm -e bash --noprofile --norc
(Ou, si vous n'en avez pas
xterm
,gnome-terminal -- bash --noprofile --norc
--- merci à @ Mike Nakis pour le commentaire).Vous avez maintenant un terminal avec un shell qui n'a ajouté aucune variable d'environnement. Vous pouvez utiliser
env
ici pour lister toutes vos variables d'environnement:Il est évident que les fichiers d’environnement seront ajoutés aux variables d’environnement du nouveau shell, mais que ces variables doivent de toute façon être disponibles (par héritage) pour tous les programmes du système.
Je poste ceci parce que c'est la quatrième fois que je dois effectuer une nouvelle recherche sur cette astuce en vérifiant mon
.pam_environment
dossier. Alors maintenant, je vais le trouver plus rapidement (et dans le processus, j'espère aider quelqu'un d'autre ...)la source
xterm -e bash --noprofile --norc
cette option, car les fichiers de démarrage ne sont ni lus ni exécutés lors du démarrage d'Ubuntu avec une interface graphique? Voir le site askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norc
Vous pouvez voir toutes les variables avec la commande
declare
intégrée.Si vous ne vous intéressez qu'aux variables d'environnement, utilisez
Exécuter
help declare
pour voir quelles sont les autres options.la source
POSIXLY_CORRECT=1 set
et il est également digne de mention quideclare
estalias
(dans ce contexte) pourtypeset
un autre builtin bash.Pour lister les variables d'environnement dans le terminal avec CTRL+ ALT+, Tvous pouvez utiliser la
env
commande.par exemple :
etc.
J'espère que ça t'as aidé.
la source
Dans bash en utilisant compgen:
la source
compgen -v | while read line; do declare -p $line; done
Ici, la plupart des solutions n'impriment que des variables d'environnement ou ont pour inconvénient que env ou (set -o posix; posix) n'imprime pas les valeurs sous une forme analysable (essayez d'imprimer la variable A = $ 'a \ r \ nb' ...). .
Voici une fonction qui imprimera toutes les variables, une variable par ligne, sous la forme d'échappement POSIX:
Merci à @tmgoblin d'avoir signalé l'utilisation de compgen -v.
la source
env est une méthode POSIX 7 :
Exemple de sortie:
Elle 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érez cela
printenv
, ce 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-printenvla source
env
J'aurais aimé qu'il soit plus visible avec une meilleure mise en forme, et j'ai ajouté plus d'informations.Si vous voulez une variable d’environnement spécifique, plutôt que de les imprimer toutes avec
printenv
, vous pouvez par exemple l’imprimer en faisantecho "$PWD"
la source
printenv ne liste que les variables exportées, command+ alt+ $ ("\ e $": variable complète) listera toutes les variables.
la source