Comment lister toutes les variables shell?

18

Lire à propos de cette question: Dans zsh, comment puis-je répertorier toutes les variables d'environnement? , Je me suis demandé, comment puis-je lister toutes les variables du shell ?

En outre, la distinction entre les variables de shell et les variables d' environnement s'applique-t-elle aux shells autres que zsh?

Je suis principalement intéressé par Bash et Zsh, mais ce serait formidable de savoir comment faire cela dans d'autres shells traditionnels.

Josh
la source

Réponses:

21

Liste toutes les variables shell

bash: utiliser set -o posix ; set. Les options POSIX sont là pour éviter de générer trop d'informations, comme les définitions de fonction. declare -pfonctionne également.

zsh : utilisation typeset

Variables shell et variables d'environnement

Une variable d'environnement est disponible pour exec()les processus enfants (comme copie. Si le processus parent modifie la variable, l'environnement enfant n'est pas mis à jour). Une variable non liée à l'environnement n'est disponible que pour le shell en cours d'exécution et les fork()sous- coquilles -ed. Cette distinction est présente dans tous les obus.

(complété grâce aux commentaires)

Uriel
la source
declare -pfaire de même
Costas
La question a également une réponse ici: stackoverflow.com/questions/1305237/…
Uriel
1
set -o posixn'existe pas dans zsh; setne génère pas de définitions de fonction.
vinc17
1
set -o posixest une erreur de syntaxe dans la plupart des shells.
mikeserv
3
Les variables shell sont également disponibles dans les processus enfants. La différence survient lorsque le processus enfant exécute un nouveau programme: les variables d'environnement sont transmises exec, les variables shell ne le sont pas.
Barmar
7

Il existe de nombreuses alternatives:

printenv

Imprime les valeurs des VARIABLE (s) d'environnement spécifiées. Si aucune variable n'est spécifiée, imprimez les paires nom et valeur pour toutes.

env

env - exécuter un programme dans un environnement modifié

exportation

Définissez une variable d'environnement. Marquez chaque nom à transmettre aux processus enfants dans l'environnement .....

-p Affiche la sortie sous une forme qui peut être réutilisée en entrée.

Si aucun nom n'est fourni, ou si l'option `-p 'est donnée, une liste des noms exportés s'affiche.

ensemble

est également utile pour obtenir des variables shell.

Si vous avez besoin d'informations supplémentaires (entier, exporté), vous devez plutôt utiliser

composer

l'exportation a l'avantage que sa sortie peut être immédiatement relue sur le shell.

Enfin, il y a

compgen -v

Affichez les compléments possibles en fonction des options.

qui montre toutes les variables, le shell et l'environnement, sans leur valeur ni info supplémentaire. Vous devrez faire écho à $ VARIABLE_NAME pour trouver la valeur de la variable. Mais au moins la liste est complète. Il appartient à bash , pas à zsh .

MariusMatutiae
la source
1
exportn'a aucun avantage sur set, au moins, quand il s'agit de citer pour la rentrée de shell. Et printenvet envne concernent pas du tout les variables shell, bien que celles-ci coïncident souvent avec les variables d'environnement.
mikeserv
3

Avec zsh, vous pouvez utiliser typeset, qui donne plus d'informations que set, par exemple, le type des variables. Vous pouvez toujours filtrer la sortie avec grepou sed, selon ce que vous voulez. Les variables d'environnement sont marquées comme exporteddans la sortie.

vinc17
la source