Un shell est démarré lorsque vous vous connectez, mais il est également démarré par des programmes comme make
, ou lorsque vous exécutez un script shell, ou lorsque vous tapez :sh
sur vi
, ou lorsque vous créez une nouvelle fenêtre de terminal.
À l'origine, le shell lisait ~/.profile
lorsque vous vous êtes connecté ou que vous avez exécuté su
. Ce script ferait des choses comme annoncer si vous aviez de nouveaux e-mails, personnaliser vos caractères d'effacement et de suppression, et définir et exporter les variables TERM et PATH. Lorsqu'il a démarré dans presque n'importe quel autre contexte, le shell n'a pas lu ~/.profile
, car faire la plupart de ces choses serait redondant. Vous deviez avoir exporté toutes les variables importantes du shell vers le nouveau shell.
La façon dont le shell savait s'il fallait lire ~/.profile
était de vérifier si le premier caractère de argv[0]
, alias $0
, l'était '-'
.
Tout d'abord csh
, des alias ont été introduits. Les alias n'ont pas été exportés dans l'environnement. csh
a été conçu pour lire dans deux scripts d'initialisation différents. ~/.login
a été lu uniquement lorsqu'un utilisateur s'est connecté, et le signal pour le faire était si argv[0]
commencé avec '-'
. ~/.cshrc
a été lu à chaque démarrage du shell. En général, on a placé des alias ~/.cshrc
et tout le reste ~/.login
. csh
également pris en charge ~/.logout
, qui dans la plupart des cas vient d'effacer l'écran et de s'exécuter fortune
.
D'autres obus ont adopté ces mêmes caractéristiques. ksh
lirait ~/.kshrc
, bash
lirait ~/.bashrc
, et c'est là que vous placeriez vos définitions d'alias.
Donc, pour faire court, l'application qui génère un shell doit décider s'il doit s'agir d'un "shell de connexion", auquel cas il y en a '-'
au début ou d'un shell normal. Dans la plupart des cas, un shell qui va être interactif est démarré en tant que shell de connexion, et un shell destiné uniquement à exécuter certaines commandes, soit en tant qu'arguments soit à partir d'un script, puis exit est un shell normal.
Mais tout dépend du caprice de l'application qui démarre le shell.