web-dev-qa-db-fra.com

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 tous les autres que vous avez définis.

330
Strapakowsky

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:

  • lancer un terminal
  • affiche les variables d'environnement en utilisant env, ou printenv ou autre

Le problème de ces solutions est que vous voyez les variables d’environnement du shell en cours d’exécution dans 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):

  • appuyez sur Alt-F2
  • lancez 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 répertorier toutes vos variables d'environnement:

Example of the bare Shell

Il est évident que les fichiers d’environnement sont ajoutés aux variables d’environnement dans le nouveau shell, mais ces variables doivent néanmoins être disponibles (par héritage) pour tous les programmes du système.

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

49
Rmano

Vous pouvez voir toutes les variables avec la variable intégrée declare.

declare -p

Si vous ne vous intéressez qu'aux variables d'environnement, utilisez

declare -xp

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

36
geirha

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

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
rɑːdʒɑ

Dans bash en utilisant compgen:

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

env est un POSIX 7 voies :

export asdf=qwer
env | grep asdf

Exemple de sortie:

asdf=qwer

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 par rapport à 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

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:

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

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

3
Ján Lalinský

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

2
inigo333

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

0
user1133275