web-dev-qa-db-fra.com

Comment puis-je voir une liste de toutes les variables d'environnement actuellement définies dans un terminal bash Linux?

Dans un terminal bash Linux, plusieurs variables d'environnement ont souvent été définies, telles que $PATH et $HOME.

Est-il possible de voir toutes les variables d'environnement définies? Comment?

30
Cory Klein

TL; DR: utiliser (set -o posix ; set)


Selon le manuel de Bash, vous pouvez utiliser la commande intégrée set pour afficher toutes les variables d'environnement définies. La commande set affichera également les définitions de toutes les fonctions. Si vous souhaitez uniquement afficher les variables, et non les fonctions, vous pouvez activer le mode POSIX avant d'exécuter la commande set. La méthode la plus simple consiste à utiliser set -o posix, mais le mode POSIX restera activé jusqu'à ce que vous l'éteigniez avec set +o posix.

Par conséquent, la commande suivante affiche toutes les variables d'environnement définies à l'aide d'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 commande env; toutefois, 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 cette divergence est que env est un exécutable séparé, par opposition à set qui est une commande intégrée du shell. Selon le manuel Bash , lorsqu'une commande n'est pas une commande ni une fonction intégrée à Shell, elle ne recevra que les variables d'environnement marquées pour l'exportation dans Bash . De nombreuses variables ne sont pas exportées. Par conséquent, si vous souhaitez voir toutes les variables définies par votre shell, vous devez utiliser la commande set 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 env ne le fait pas.

30
Starfish

La commande env sans argument affichera une liste des variables d’environnement "exportées" et leurs valeurs. Ces variables sont rendues visibles par les sous-processus - de nombreuses autres variables d'environnement ne sont pas affichées avec cela, et utilisées uniquement dans le shell en cours d'exécution, par exemple pour la configuration.

23
RedGrittyBrick
compgen -v

affiche les variables du shell (mais pas les valeurs).

compgen -e

affiche les variables exportées, c’est-à-dire celles qui sont héritées par les processus démarrés par ce shell (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

11
Evgeni Sergeev