Les processus utilisateurs sont souvent des processus fils du shell
indiqué pour cet utilisateur dans le fichier /etc/passwd
.
Les fichiers d'initialisation de ces shells modifient souvent la
variable PATH.
Lors de la connexion, le nom du shell est précédé
d'un '-'. Par exemple, dans le cas
de bash
, on aura -bash
. Cela indique au shell qu'il est
en présence d'un login shell et qu'il doit dans
ce cas exécuter les fichiers d'initialisation
spécifiques à la connexion. Dans le cas contraire,
on aura une initialisation plus légère.
De plus, le shell détermine s'il est interactif ou non, c'est à
dire si les commandes viennent d'un terminal (tty) ou d'un fichier.
Cela modifie également l'importance de l'initialisation si bien
qu'un shell non interactif et qui n'est pas lancé avec une
connexion effectue vraiment très peu d'initialisation
(bash
n'exécute aucune initialisation dans ce cas là).
Pour un login shell normal, bash
parcourt le fichier
/etc/profile
, commun à tous,
où les variables d'environnement, dont PATH, peuvent être
fixées pour les utilisateurs de bash
. Cependant, ce fichier
n'est pas relu lorsque le système
se trouve face à un shell non interactif.
Le cas le plus important est rsh
, où la commande est
exécutée sur la machine voisine : le fichier
/etc/profile
n'est pas lancé et le PATH provient du
démon de rsh
.
bash
accepte les arguments -login
et -i
qui
sont utilisés pour obtenir
respectivement un login shell et/ou un shell interactif.
L'utilisateur peut redéfinir les paramètres contenus dans
/etc/profile
en créant un fichier
~/.bash_profile
, ~/.bash_login
ou
~/.profile
. Il faut
noter que seul le premier fichier sera exécuté même
si cela diffère des habitudes de csh
. En particulier,
~/.bash_login
ne sera pas forcement
exécuté pour un login shell, car si
~/.bash_profile
existe, ce dernier sera prioritaire.
Si bash
est lancé par sh
(qui est un lien
symbolique sur bash
),
il se comporte comme le Bourne shell original : il ne parcourt que les
fichiers /etc/profile
et ~/.profile
et uniquement
dans le cas d'un login shell.
Pour un login shell, tcsh
exécute dans l'ordre
les fichiers suivants :
/etc/csh.cshrc
/etc/csh.login
~/.tcshrc
~/.cshrc
(si ~/.tcshrc
n'existe pas)~/.history
~/.login
~/.cshdirs
Attention. tcsh
peut être compilé pour
exécuter les scripts de
connexion (login
) avant les scripts cshrc
.
Les shells non interactifs n'exécutent que les scripts
*cshrc
. Les scripts *login
peuvent être
utilisés pour ne fixer le PATH que lors d'une connexion.