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

31

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?

Cory Klein
la source
1
askubuntu.com/questions/275965/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

32

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.

Étoile de mer
la source
24

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.

RedGrittyBrick
la source
10
Je préfère printenv, car les deux envet setont d'autres fonctions que la sortie de l'environnement.
iglvzx
3
envimprime uniquement une liste des variables d'environnement qui ont été marquées pour l'exportation. Il n'imprimera pas toutes les variables.
Starfish
4
@Starfish a raison - cela signifie que cette réponse acceptée était très fausse. Modifié pour indiquer qu'il répertorie uniquement les variables exportées.
Volker Siegel