[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: variable globale d'environnement



On 04/15/2015 10:30 PM, humbert.olivier.1@free.fr wrote:
Si j'ai bien compris la gestion des variables, elles sont héritées de processus-parent en processus-enfant. Et si je suis juste dans ma compréhension, le démarrage (à partir d'init) se passe ainsi :

Salut, ben long message, désolé j'ai survolé la fin!

Une petite histoire des variables dans sysvinit (Ça a du changer depuis!):

1 - Démarrage du système, le noyau rempli
HOME=/
TERM=linux

2 - Il lance init qui configure à son tour quelques variables:
PATH, RUNLEVEL, CONSOLE...

3 - init va voir dans /etc/inittab et en fonction du runlevel lance des getty sur les tty. getty positionne TERM=linux et lance /bin/login en général de tty1 à 6.

4 - login conserve l'environnement ou le détruit en conservant TERM et met en place les variables {HOME,SHELL,TERM,PATH,MAIL,LOGNAME,USER}. Il lance le shell lu dans /etc/passwd.

5 - le shell configure en interne des variables puis va en général lire les fichiers profile (et éventuellement bashrc, tout ça dépend du shell bien sûr) et en déduire les dernières variables à positionner.

4 bis - Le DM a ses propres mécanisme, c'est normal d'avoir des variables différentes entre les tty et la session graphique.

-> Il faut différencier les variables que tu vois dans un shell et les variables du système. Je sais pas comment dire ça, quand tu lances un shell, que tu sois en graphique ou tty, peu lui importe ce qui se passait avant. C'est pas parce qu'une variable a telle valeur en lançant "env" qu'un autre programme quelconque aura le même couple valeur/variable (sauf s'il descends du shell en question).

-> Le système lance des "login shells" de tty1 à tty6, en gros ils lisent les fichiers "profile" (qui souvent sourcent les bashrc). Par contre les shells lancés en graphique dans un émulateur de terminal ne sont pas forcément des shells de connexion comme on traduit en français. Ils ne lisent pas les "profile" en n'ont donc pas forcément les mêmes variables.

Il semble que ton DM ne lance pas des login shells, si tu as besoin de ta variable juste dans bash, le bashrc c'est cool. Et si tu veux lancer un login shell, tu fais juste "su - nom_utilisateur". Y'a le tiret en plus.

Tu peux aussi t'amuser à te mettre en root et lancer "login".


--
mireero


Reply to: