Lorsque je vérifie l'environnement de mon système, de nombreuses variables environnementales apparaissent. Comment puis-je simplement rechercher une variable particulière?
Un livre que je lis dit:
Parfois, le nombre de variables dans votre environnement devient assez important, à tel point que vous ne voulez pas voir toutes les valeurs affichées lorsque vous êtes intéressé par une seule. Si tel est le cas, vous pouvez utiliser la
echo
commande pour afficher la valeur actuelle d'une variable d'environnement.
Comment faire cela dans un terminal Linux?
la source
echo
est un mauvais choix de commande car il pourrait transformer le contenu de la variable. Il affichera le contenu du paramètre shell du même nom. Ce n'est pas nécessairement la même chose si vous utilisez le Bourne shell ou pour des vars env comme1
,*
par exemple. Et vous ne pouvez pas utiliser cette approche pour les vars env dont le nom n'est pas valide en tant que nom de variable shell.printenv VAR
les affichera tous (au moins pour l'implémentation GNU).En exécutant:
printenv
Vous verrez toutes les variables d'environnement. Pour plus d'informations, vous pouvez consulter:
https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps
la source
printenv
variablename
n'affichera que la variable nommée; par exemple,printenv HOME
fera à peu près la même chose queecho "$HOME"
.Il est important de comprendre que chaque processus a son propre ensemble de variables d'environnement.
Lorsqu'un processus appelle l'
fork()
appel système, un deuxième processus (l' enfant ) identique au premier ( le parent ) est créé (cette copie inclut l'environnement, qui se trouve juste au-dessus de la pile (ou juste en dessous, selon la façon dont vous pensez des piles:-)
- mais sous unix / linux, la pile se développe à partir d'adresses élevées).Habituellement, le processus enfant appellera alors l'appel
execve()
système, qui jettera tout dans sa mémoire (virtuelle) et le reconstruira à partir du code et des sections de données dans le fichier binaire spécifié.Cependant, quand il reconstruit la pile, il copie l'environnement et les chaînes d'arguments passées à
execve()
la pile en premier (dans cet ordre), avant d'appeler lamain()
fonction (une grande partie du travail est effectuée dans lecrt0
code de démarrage après lesexecve()
retours (à l' entrée point spécifié dans le binaire)).Il y a des wrappers pour l'
execve()
appel système dans la bibliothèque C qui passeront l'environnement actuel (c'est-à-dire une copie de l'environnement des parents), au lieu que l'appelant le fournisse (donc en fait l'enfant héritera de l'environnement des parents) - voirenviron(7)
.Essayez d'exécuter (en tant que root) la commande
ps axeww | less
... cela vous montrera l'environnement pour tous les processus! Un processus intéressant est l'ID de processus 1 (c'est-à-dire leinit
processus - le premier processus créé par le noyau au démarrage).Si vous souhaitez examiner l'environnement d'un processus spécifique (et vous savez que c'est l'ID de processus), essayez d'exécuter la commande
cat /proc/<PID>/environ
(en la remplaçant<PID>
par l'ID de processus).Notez que si un processus a suffisamment de privilèges, il peut réécrire sa propre pile, ce qui peut rendre difficile la connaissance de son environnement - vous verrez des processus démon comme celui-ci dans la sortie ps.
Mais à la fin, toute cette gaufre se résume à ce que @chaos a dit ci-dessus, si vous voulez regarder la valeur actuelle d'une variable d'environnement spécifique dans votre processus shell, utilisez simplement la commande
echo "$<NAME>"
( intégrée) (en remplaçant<NAME>
par le nom de la variable d’environnement qui vous intéresse) ... sachez que la même variable peut avoir une valeur différente, ou n’exister pas du tout, dans un autre processus.la source
e
optionps
et le/proc/…/environ
fichier spécial peuvent ne pas exister sur tous les systèmes. (2) AFAIK, chaque processus Unix a le privilège de réécrire sa pile et de modifier ses variables d'environnement. (3) Pour plus de détails, voir À qui appartiennent les variables d'environnement? (sur super utilisateur ).ps
... mais maintenant que vous avez souligné ce point, je ne me souviens pas pourquoi je pensé que.Vous pouvez obtenir ce que vous cherchez avec
export
:Affiche le contenu de la
$HOME
variable.la source
si vous devez définir un grand nombre de vars:
après les avoir réglés:
que d'afficher ce qui a été défini:
De cette façon, vous vous retrouverez bientôt, travaillant avec plusieurs ensembles de vars shell prédéfinis dans des fichiers cnf, qui, combinés avec tmux, feront de vous le maître de la gestion de la configuration dans les environnements shell:
la source