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?
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.
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.
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