Dans un terminal bash Linux, il y a souvent de nombreuses variables d'environnement qui ont été définies, comme $PATH
et $HOME
.
Est-il possible de voir toutes les variables d'environnement qui ont été définies? Comment?
environment-variables
Cory Klein
la source
la source
Réponses:
TL; DR: utiliser
(set -o posix ; set)
Selon le manuel de Bash, vous pouvez utiliser la
set
commande intégrée pour afficher toutes les variables d'environnement qui ont été définies. Laset
commande affichera également les définitions de toutes les fonctions. Si vous souhaitez uniquement voir les variables et non les fonctions, vous pouvez activer le mode POSIX avant d'exécuter la commande set. La façon la plus simple de le faire est deset -o posix
, mais cela laissera le mode POSIX activé jusqu'à ce que vous le désactiviez avecset +o posix
.Par conséquent, la commande suivante affichera toutes les variables d'environnement définies en utilisant un sous-shell sans affecter la conformité POSIX dans votre shell actuel.
@RedGrittyBrick et @iglvzx ont suggéré d'utiliser la
env
commande, mais cette commande ne fournira pas une liste complète des variables d'environnement.env
n'affichera que les variables qui ont été marquées pour l'exportation. Comparez la sortie deenv | sort
etexport -p
et vous verrez ce que je veux dire. Vous pouvez exécutercomm -23 <(set -o posix; set) <(env|sort)
si vous souhaitez voir quelles variables d'environnement ne sont pas exportées.La raison de cet écart est qu'il
env
s'agit d'un exécutable distinct, contrairement àset
une commande intégrée au shell. Selon le manuel de Bash, lorsqu'une commande n'est pas une commande ou une fonction intégrée au shell, elle ne recevra que les variables d'environnement qui ont été marquées pour l'exportation dans Bash . Il existe de nombreuses variables qui ne sont pas exportées. Par conséquent, si vous souhaitez voir toutes les variables que votre shell a définies, vous devez utiliser laset
commande comme indiqué dans le manuel.Vous pouvez facilement tester ce comportement par vous-même à l'aide des commandes suivantes.
Vous verrez que
set
fournit une sortie alors que ceenv
n'est pas le cas.la source
La
env
commande sans arguments affichera une liste des variables d'environnement "exportées" et leurs valeurs. Ces variables sont rendues visibles aux sous-processus - de nombreuses autres variables d'environnement ne sont pas affichées avec cela, et utilisées uniquement à l'intérieur du shell en cours d'exécution, par exemple pour la configuration.la source
printenv
, car les deuxenv
etset
ont d'autres fonctions que la sortie de l'environnement.env
imprime uniquement une liste des variables d'environnement qui ont été marquées pour l'exportation. Il n'imprimera pas toutes les variables.affiche les variables shell (mais pas les valeurs).
affiche les variables exportées, c'est-à-dire celles qui sont héritées par les processus que ce shell démarre (mais pas leurs valeurs).
Différence entre le shell et les variables exportées: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
la source
compgen -e
c'est exactement ce que je voulais!