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?
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?
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. La set
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 de set -o posix
, mais cela laissera le mode POSIX activé jusqu'à ce que vous le désactiviez avec set +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.
(set -o posix ; set)
@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 de env | sort
et export -p
et vous verrez ce que je veux dire. Vous pouvez exécuter comm -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 la set
commande comme indiqué dans le manuel.
Vous pouvez facilement tester ce comportement par vous-même à l'aide des commandes suivantes.
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
Vous verrez que set
fournit une sortie alors que ce env
n'est pas le cas.
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.
printenv
, car les deux env
et set
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.
compgen -v
affiche les variables shell (mais pas les valeurs).
compgen -e
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
compgen -e
c'est exactement ce que je voulais!