Cette réponse nécessite une certaine expérience et une connaissance des scripts shell avec les termes variable, valeur, substitution de variable, invite, écho, noyau, shell, utilitaire, session et processus.
Une variable d'environnement (envar) est un ensemble de variables globales définies pouvant influer sur le comportement d'un processus donné sur le système d'exploitation d'un ordinateur.
1. Une introduction exemplaire:
Nous substituons envars avec un $
et lettres majuscules . Par exemple: $PS1
.
Nous pouvons imprimer un envar de cette façon:
echo $PS1
$PS1
contient la valeur de l'invite Unix. Disons que ses valeurs natives sont \u
\w
$
.
\u
représente l'utilisateur (actuel),
\w
est synonyme de répertoire de travail,
$
est à la frontière de l'invite.
Donc, si nous le faisons echo $PS1
, nous voyons les valeurs de \u
, \w
plus le signe dollar à la fin.
Nous pourrions changer le comportement Unix dans ce contexte, si nous changeons les valeurs de cet environnement. Par exemple:
PS1="\w >"
Maintenant, l'invite ressemble à ceci (en supposant que le répertoire de travail s'appelle "John"):
John >
De la même manière que nous pourrions le faire PS1="Hello, I'm your prompt >"
, echo $PS1
nous apporterons:
Hello, I'm your prompt >
Dans Bash 4.xx, nous pouvons imprimer TOUS les envars du système avec la env
commande. Je suggère d'exécuter env
dans le terminal et de regarder la sortie.
2. Comment ces données sont-elles affichées et manipulées:
Le terminal d’une session permet de personnaliser les envars de Bash.
Les modifications susmentionnées sont généralement temporaires et voici pourquoi:
Chaque session (qui n'est pas une sous-session) est unique et plusieurs processus peuvent s'exécuter de manière unique en même temps (chacun avec son propre ensemble d'environs), mais il existe généralement un héritage de la session 0 à la session 1 et plus.
Les modifications que nous apportons à un processus lui sont propres et cesseront si nous le fermons sans les sauvegarder.
Alors, comment pouvons-nous enregistrer ces modifications:
Il existe plusieurs types de manières de stocker les modifications d’envar, en fonction de la portée choisie. Voici différents niveaux (niveaux) pour de tels changements:
- Niveau de processus: les envars ne sont disponibles que pour les programmes de la session en cours.
- Niveau d'exportation: les envars sont disponibles pour les programmes de la session en cours ou de toutes ses sous-sessions.
- Niveau global: Les modifications seront stockées pour toutes les sessions, quelles qu'elles soient (primaire et tous les sous-marins).
Où sont les données envar stockées:
Unix est composé de 3 couches principales: le noyau, le shell et les utilitaires. Autant que je sache, chaque shell a ses propres envars, et ceux-ci sont construits principalement ou exclusivement dans le shell.
Le lieu spécifique dans lequel changer globalement ceux-ci est généralement /etc/profile
bien que nous puissions également le faire dans .bashrc
bien sûr.
3. Créer de nouveaux envars:
Nous pouvons créer de nouveaux envars et voici un moyen; depuis Bash 4.xx, il n’ya pas d’enavar natif nommé MESSAGE
(comme indiqué, les envars sont généralement en majuscule).
MESSAGE="Hello world!"
va le créer pour nous, et maintenant si nous tapons echo $MESSAGE
, nous obtenons hello world!
.
Si nous exécutons bash
dans notre session de travail actuelle (fenêtre), nous commencerions une nouvelle sous-session bash et ne fonctionnerons plus dans le processus d'origine, à moins que nous ne l'exécutions exit
.
Remarque: Dans les systèmes d'exploitation dotés d'un émulateur de terminal (tel que le bureau Ubuntu), une sous-session s'exécute généralement sur la même fenêtre, mais une nouvelle session dans une autre fenêtre n'est pas une sous-session de celle existante (il s'agit d'un processus adjacent ). .
Remarque: N'utilisez pas de signes spéciaux dans les valeurs envar telles que! ou ils ne seront pas sauvés.
Exportation de l'environnement de la session d'origine vers toutes les sous-sessions:
Nous pouvons toujours utiliser l'environnement créé dans la première session, ainsi que dans la seconde, sans l'enregistrer dans les fichiers de configuration utilisateur ou global (voir les données suivantes). Voici comment faire cela:
Accédez à la session d'origine (que ce soit sur la fenêtre en cours ou une autre) et exécutez:
export MESSAGE
lors de l'exportation, n'utilisez pas de $
signe.
Il est maintenant exporté vers toutes les sous-sessions. Si vous le faites echo $MESSAGE
sur une sous-session, que ce soit de votre utilisateur ou d'un autre, il sera alors imprimé.
Notez que les variables internes du shell telles que PS1
ne doivent pas être exportées, mais si vous voulez les exporter de quelque manière que ce soit et qu'elles n'apparaissent pas, ne les exécutez pas bash
après export
, mais plutôt bash –norc
.
4. L'environnement $ PATH:
$PATH
est l’environnement que les utilisateurs changeront généralement le plus.
Si nous echo $PATH
, nous allons voir ce flux:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Les valeurs imprimées de cet environnement sont séparées par des deux points (:), mais voici une manière potentiellement plus confortable (ce sont les mêmes valeurs):
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
Ce sont des répertoires à rechercher lorsque nous exécutons un utilitaire.
En exécutant, which echo
nous obtiendrons son emplacement - par exemple, nous pourrions voir qu'il existe dans /bin/echo
.
Sur cette base, nous n’avons pas besoin de taper echo envar pour afficher les valeurs d’evnar. Nous pouvons aussi faire:
/bin/echo $ENVAR
L'environnement sera toujours exécuté, par exemple:
/bin/echo $HOME
Nous donne
/home/User || /root
Tout comme:
echo $HOME
Nous donne
/home/User || /root
Remarque: $HOME
est abrégé en ~
.
Les relations system- $ PATH et une interaction possible de l'utilisateur:
Dans Bash 4.xx, lorsque nous utilisons un utilitaire sans son chemin complet, le système utilisera les 6 valeurs mentionnées ci-dessus, de l' $PATH
environnement. Donc, il commencera /user/local/bin
et suivra tout son contenu à la recherche de l' echo
exécutable.
Dans ce cas, il s’arrêtera à /bin/echo
, dans lequel, dans ce cas, l’exécutable réside.
Par conséquent, la principale raison pour laquelle nous pourrions personnaliser l’ $PATH
environnement est l’installation d’exécutables qui ne se trouvent sous aucune de ses valeurs natives.
Après l’installation de tels exécutables, nous devons définir leur $PATH
valeur en conséquence et nous pourrons ensuite travailler avec eux.
5. Annexe - en expansion $PATH
:
Nous pouvons export $PATH
faire des sous-sessions bash (qui incluent des extensions bash telles que WP-CLI pour WordPress ou Drush pour Drupal) de cette façon:
export PATH="/home/John:$PATH"
Cela ajoutera une nouvelle valeur /home/John
à $PATH
, et juste après, il y annexera toutes les valeurs natives (juste après les deux points), qui sont stockées sous la syntaxe $PATH
.
Un tel changement permanent peut être effectué dans le script correspondant, généralement sous /etc/profile
et sous le nom .bashrc
.
exec(3)
famille (c'est-à-dire ceux qui ne correspondent pas à exec * v) passent ** environ sous les couvertures.