Dans un terminal bash Linux, il y a souvent de nombreuses variables d'environnement qui ont été définies, comme $PATHet $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 $PATHet $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 setcommande intégrée pour afficher toutes les variables d'environnement qui ont été définies. La setcommande 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 envcommande, mais cette commande ne fournira pas une liste complète des variables d'environnement. envn'affichera que les variables qui ont été marquées pour l'exportation. Comparez la sortie de env | sortet export -pet 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 envs'agit d'un exécutable distinct, contrairement à setune 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 setcommande 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 setfournit une sortie alors que ce envn'est pas le cas.
La envcommande 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 envet setont d'autres fonctions que la sortie de l'environnement.
envimprime 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 -ec'est exactement ce que je voulais!