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.

Pour bash: (le shell standard dans Ubuntu)

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

printenv

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:

( set -o posix ; set ) | less

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:

( setopt posixbuiltin; set; ) | less

Pour plus d'informations sur les options ZSH, voir zshoptions page de manuel.

Vous pouvez voir toutes les variables avec le declare builtin.

declare -p

Si vous n'êtes intéressé que par les variables d'environnement, utilisez

declare -xp

Exécuter help declare pour voir quelles sont les autres options.

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

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

  • lancer un terminal
  • afficher les variables d'environnement en utilisant env, ouprintenv ou quoi que ce soit

Le problème de ces solutions est que vous voyez les variables d'environnement du shell qui s'exécute 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.

Ceci est perceptible 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 faire ce qui suit (dans Gnome Shell, je suis sûr qu'il existe une méthode équivalente dans tous les autres DE):

  • appuyez sur Alt-F2
  • exécutez la commande xterm -e bash --noprofile --norc

(Ou, si vous n'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:

Example of the bare shell

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

Je poste ceci parce que c'est la quatrième fois que je dois rechercher à nouveau cette astuce, en vérifiant mon .pam_environment fichier. Alors maintenant, je vais le trouver plus rapidement (et dans le processus, j'espère aider quelqu'un d'autre...)

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

exemple :

[raja@localhost ~]$ envXDG_VTNR=1SSH_AGENT_PID=3671XDG_SESSION_ID=3HOSTNAME=localhost.localdomainIMSETTINGS_INTEGRATE_DESKTOP=yesGPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1GLADE_PIXMAP_PATH=:TERM=xterm-256colorSHELL=/bin/bashXDG_MENU_PREFIX=xfce-DESKTOP_STARTUP_ID=HISTSIZE=1000XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201WINDOWID=65011716GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2IMSETTINGS_MODULE=noneQT_GRAPHICSSYSTEM_CHECKED=1USER=raja

etc.

j'espère que ça aide.

Dans bash en utilisant compgen:

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

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 faisant echo "$PWD"

La plupart des solutions ici n'impriment que des variables d'environnement, ou ont l'inconvénient que env ou (set-o posix; set) n'impriment pas les valeurs sous une forme facilement analysable (essayez d'imprimer la variable A=$ 'a\r\nb', elle a plusieurs lignes...).

Voici une fonction qui imprimera toutes les variables, une variable par ligne, sous la forme d'échappement POSIX (fonctionne correctement pour les variables de texte simples, ne fonctionne pas pour les tableaux):

function dump_vars {    local VARNAME    compgen -v | while read -r VARNAME; do        printf "$VARNAME=%q\n" "${!VARNAME}"    done}

Merci à @tmgoblin d'avoir souligné l'utilisation de compgen-v.

env est un POSIX 7 voies:

export asdf=qwerenv | grep asdf

Sortie d'é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 ça à ça 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

printenv répertorie uniquement les variables exportées,command+alt+$("\e"": complete-variable) listera toutes les variables.

  • printenv affichera toutes les variables d'environnement globales
  • env, variable d'environnement globale après modification de la connexion
  • set, affichera toutes les variables d'environnement locales, relatives à la session (généralement la var locale est le global + le particulier de la session)

Vous avez accepté une réponse incorrecte. “printenv” ne vous donne que les variables d’environnement. Si vous voulez vraiment que toutes les variables soient actuellement déclarées dans votre shell, utilisez “declare-p"ou” typeset-p".