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: