Si j'examine mon shell bash dans un terminal OS X (10.6.4), par exemple en tapant echo $0
, il y a un tableau de bord en face de ma coquille, comme ceci: -bash
. Que signifie ce tiret?
Cela signifie qu'il bash
est invoqué en tant que shell de connexion.
man bash
dit:
Un shell de connexion est un shell dont le premier caractère de l'argument zéro est un
-
, ou un commençant par l'--login
option.Lorsque bash est appelé en tant que shell de connexion interactif ou en tant que shell non interactif avec l'
--login
option, il lit et exécute d'abord les commandes du fichier/etc/profile
, si ce fichier existe. Après avoir lu ce fichier, il recherche~/.bash_profile
,~/.bash_login
et~/.profile
, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible. L'--noprofile
option peut être utilisée lorsque le shell est démarré pour inhiber ce comportement.Lorsqu'un shell de connexion se ferme, bash lit et exécute les commandes du fichier
~/.bash_logout
, s'il existe.
Vous trouverez login -pf
dans votre ps
sortie, qui démarre un shell de connexion par défaut.
Essayez de courir login -pf
et login -pfl
voyez la différence. man login
décrit la différence:
-l
Indique au programme exécuté par login qu'il ne s'agit pas d'une session de connexion (par convention, une session de connexion est signalée au programme avec un trait d'union comme premier caractère deargv[0]
; cette option le désactive), et l'empêche d'chdir(2)
entrer dans le répertoire personnel de l'utilisateur . La valeur par défaut est d'ajouter le trait d'union (il s'agit d'une session de connexion).
man
citationsecho $0
: si je tapeecho $0
dans le terminal invoqué parctrl + alt + f1
, le résultat est-bash
; mais si je le tape dans termianl invoqué parctrl + alt + t
, le résultat estbash
(pas de tiret de tête). Pourriez-vous expliquer pourquoi?--login
argument, il ne change pas sonargv[0]
, mais agit comme un shell de connexion.