Vous êtes sur la page 1sur 4

Fichiers 

de connexion
Lors de la connexion, le Korn shell exécute les commandes mentionnées dans des fichiers de paramétrage destinés à 
initialiser des variables d’environnement et à activer diverses fonctionnalités. 

Le  Korn  shell  exécute,  en  premier  lieu,  un  fichier  /etc/profile,  géré  par  l’administrateur  et  commun  à  tous  les 
utilisateurs.  Ce  fichier  permet,  entre  autres,  l’affichage  d’informations  générales,  la  recherche  de  courrier,  le 
positionnement de certaines variables d’environnement. 

Dans un deuxième temps, le shell exécute le contenu d’un éventuel fichier personnel .profile, situé dans le répertoire 
de connexion. 

Parmi les tâches usuelles effectuées dans ce fichier, nous pouvons citer : 

l le paramétrage du prompt (variables PS1 et PS2), 

l le positionnement de certaines variables d’environnement, 

l le positionnement de certaines options du shell, 

l un appel éventuel à la commande umask (choix des droits par défaut). 

Historiquement,  par  rapport  à  un  souhait  de  compatibilité  ascendante  avec  le  Bourne  shell,  il  est  recommandé  de 
prévoir  un  deuxième  fichier  pour  l’activation  de  certaines  fonctionnalités  propres  au  Korn  shell  (alias,  éditeur 
intégré...).  Le  nom  de  ce  second  fichier  (traditionnellement  .kshrc)  doit  être  indiqué  dans  une  variable 
d’environnement ENV. 

Ce  deuxième  fichier  est  exécuté  après  le  fichier .profile  lors  de  la  connexion.  Par  contre,  si  le  shell  est  démarré  de 
façon interactive, le fichier .profile ne sera pas exécuté, au profit de ce seul deuxième fichier. 

Il ne faut pas confondre la commande env avec la variable  ENV qui contient donc le nom d’un fichier exécuté seul lors 
du lancement interactif du shell ou exécuté après le fichier .profile lors d’une véritable connexion. 

Exemple de fichier .profile 

# personnaliser les prompts


PS1=’$PWD$ ’
PS2="suite: "
# completer son PATH
PATH=$PATH:$HOME/bin
# se proteger contre les ecrasements via des redirections
set -o noclobber
# choix des droits par defaut
umask 027
# choix d’un second fichier (lu apres le .profile)
ENV=$HOME/.kshrc ; export ENV

Exemple de fichier .kshrc 

# mes alias
alias h=history
alias l=’/usr/bin/ls -l’

© Editions ENI – Tous droits réservés – Copie personnelle de Saifoulaye DIALLO - 1-


alias rm=’/usr/bin/rm -i’
alias cp=’/usr/bin/cp -i’
mv=’/usr/bin/mv -i’
alias p=’/usr/bin/ps -fu $LOGNAME’
# historique des commandes
set -o vi
FCEDIT=$(whence vi) ; export FCEDIT

Certaines lignes de ces exemples de fichiers nécessitent quelques commentaires : 

PS1=’$PWD$ 

La variable PWD contient à chaque instant le nom du répertoire courant et nous souhaitons avoir cette 
information directement dans le prompt. Les simples quotes sont nécessaires pour que la variable PWD 
ne soit pas résolue immédiatement, mais bien à chaque appel de la commande cd. Si nous utilisions des 
doubles quotes, la valeur de notre prompt serait la bonne au début mais ne serait plus actualisée par la 
suite. De plus, nous souhaitons que le prompt se termine par le caractère $ (dollar). Celui­ci est 
judicieusement banalisé à l’intérieur des simples quotes. 

PATH=$PATH:$HOME/bin 

Pour un utilisateur "développeur", il est judicieux de compléter son PATH par un répertoire personnel qui 
contiendrait des commandes. 

alias rm=’/usr/bin/rm ­i’ 

Ce genre d’alias est recommandé pour sécuriser certaines commandes en forçant leur exécution avec 
l’option de demande de confirmation. 

En bash,  le  scénario  un  peu  plus  compliqué  des  fichiers  de  connexion  est  décrit dans  la  page  de  man  à  la  rubrique 
Invocation. 

$ man bash
.............................
.............................
INVOCATION
A login shell is one whose first character of argument zero is a -, or
one started with the --login option.

An interactive shell is one started without non-option arguments and


without the -c option whose standard input and error are both connected
to terminals (as determined by isatty(3)), or one started with the -i
option. PS1 is set and $- includes i if bash is interactive, allowing
a shell script or a startup file to test this state.
.............................
.............................
When bash is invoked as an interactive login shell, or as a non-inter-
active shell with the --login option, it first reads and executes com-
mands from the file /etc/profile, if that file exists. After reading
that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the

- 2- © Editions ENI – Tous droits réservés – Copie personnelle de Saifoulaye DIALLO


shell is started to inhibit this behavior.
When a login shell exits, bash reads and executes commands from the
file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash


reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if
these files exist. This may be inhibited by using the --norc option.
The --rcfile file option will force bash to read and execute commands
from file instead of /etc/bash.bashrc and ~/.bashrc.

When bash is started non-interactively, to run a shell script, for


example, it looks for the variable BASH_ENV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute.
.............................
.............................

1. Prise en compte des modifications

Pour  activer  des  modifications  dans  ces  fichiers  personnels,  nous  pourrions,  bien  entendu,  effectuer  une 
déconnexion puis une reconnexion immédiate. Pour éviter cela, nous pouvons utiliser la commande interne . (point) 
qui force l’interprétation du fichier dans le processus courant, sans création de fils. 

Ceci est indispensable pour permettre la prise en compte d’éventuelles modifications de variables d’environnement. 
En effet, rappelons que s’il y a bien un mécanisme d ’héritage du parent vers le fils, il n’y a jamais de remontée du fils 
vers le parent. 

Il est à noter qu’il n’est pas nécessaire de doter les fichiers de connexion de la permission d’exécution car ils sont 
simplement  lus  dans  ce  mode  particulier  d’utilisation  via  la  commande  .  (point).  Il  s’agit  d’ailleurs  d’une  bonne 
pratique car cela évite de les lancer par erreur comme une commande classique. 

Exemple Korn shell 

$ . .profile
ksh: .profile: not found
$ . ./.profile
$

Assez souvent, l’utilisateur ne possède pas le répertoire courant dans son PATH. Dans ce cas, la première syntaxe 
échoue  car  la  commande  .  (point)  recherche le  fichier  comme  une  commande  et  elle  n’a  pas  pu  localiser  le 
fichier  .profile.  La  seconde  syntaxe  s’impose  alors  puisque  nous  y  indiquons  explicitement  que  le  fichier  se  trouve 
dans le répertoire courant. 

Pour résumer, le premier point désigne la commande interne, le second désigne le répertoire courant et le troisième 
n’est que le premier caractère du nom du fichier ! 

En bash, la commande . (point) ne recherche pas le fichier comme une commande et trouve tout naturellement celui­
ci dans le répertoire courant. 

$ . .bashrc
$

© Editions ENI – Tous droits réservés – Copie personnelle de Saifoulaye DIALLO - 3-


En  bash,  la  commande  interne  source  (historiquement  issue  du  C  shell)  est  acceptée comme  synonyme  de  la 
commande . (point). 

- 4- © Editions ENI – Tous droits réservés – Copie personnelle de Saifoulaye DIALLO

Vous aimerez peut-être aussi