Qu'est-ce qu'un login shell
y interactive shell
et ce qu'est un .bash_profile
y .bashrc
?
Réponses
Trop de publicités?Un shell interactif est un shell démarré sans arguments non-optionnels, sauf si l'option -s est spécifiée, sans spécifier l'option -c, et dont les entrée et la sortie d'erreur sont toutes deux connectées à des terminaux (comme déterminé par isatty(3)), ou un shell démarré avec l'option -i.
Un shell interactif lit et écrit généralement sur le disque dur de l'utilisateur. d'un utilisateur.
[ manuel gnu bash ]
A shell de connexion est un shell où vous vous connectez. Vous pouvez reconnaître un shell de connexion à un ps -f
il aura un trait d'union au début du nom du programme, par exemple :
root 3561 3553 0 09:38 pts/0 00:00:00 -bash
qa 7327 3432 0 10:46 pts/1 00:00:00 -bash
En shell interactif est celui qui lit les commandes à partir de son entrée standard, généralement un terminal.
Par exemple, si vous vous connectez à bash en utilisant un xterm ou un émulateur de terminal comme putty
alors la session est à la fois un shell de connexion et un shell interactif. Si vous tapez ensuite bash
alors vous entrez dans un shell interactif, mais ce n'est pas un shell de connexion.
Si un shell script (un fichier contenant des commandes shell) est exécuté, alors il ne s'agit ni d'un shell de connexion ni d'un shell interactif.
Fichiers de démarrage sont hautement adaptables en bash :
Lorsqu'un shell bash de connexion est invoqué, alors /etc/profile
est sourcée (exécutée dans l'environnement actuel). Ensuite, l'existence de trois fichiers est vérifiée. Les vérifications de ces fichiers sont effectuées dans cet ordre :
si /etc/profile
existe, le source (l'exécuter)
si ~/.bash_profile
existe, le source (l'exécuter)
si ~/.bash_login
existe, le source (l'exécuter)
si ~/.profile
existe, le source (l'exécuter)
Une fois qu'une correspondance est trouvée, les autres fichiers sont ignorés, même s'ils existent. Le site /etc/bashrc
peut être utilisé à la fois par le ~/.bash_profile
et le ~/.bashrc
fichiers. Cela signifie que le /etc/bashrc
est extrait de toutes les invocations interactives de bash, qu'il s'agisse d'un shell avec ou sans connexion.
Donc, le .bashrc
est également exécuté à chaque fois que vous demandez une nouvelle shell interactif . Ceci n'inclut pas un shell script. Normalement, les variables, les alias ou les fonctions sont placés dans ce fichier.
Les scripts de l'interpréteur de commandes Bash lisent un fichier différent si on leur donne des instructions appropriées. Si l'utilisateur définit (généralement dans son propre .bash_profile
) une variable BASH_ENV
qui contient un nom de fichier, scripts le lira. Si cette variable n'est pas définie (et exportée) alors bash scripts ne lira aucun fichier de démarrage.
Étant donné que vous savez probablement ce qu'est un "shell" et que vous l'utilisez, votre question ne vise que le "shell". différence entre le shell de connexion et tout le reste...
Un shell de connexion ne diffère de tout autre shell que par le fait qu'un ou plusieurs scripts de configuration initiale (ressources) sont chargés au démarrage, typiquement nommés avec "profile" dans leur nom. On y définit des paramètres de base qui sont dérivés aux shells ouverts par la suite (ils n'ont donc besoin d'être définis qu'une seule fois).