102 votes

Quelles sont les différences entre un shell de connexion et un shell interactif ?

Qu'est-ce qu'un login shell y interactive shell et ce qu'est un .bash_profile y .bashrc ?

117voto

cdarke Points 8020

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.

5voto

arkascha Points 9691

É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).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X