web-dev-qa-db-fra.com

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

Qu'est-ce qu'un login Shell et interactive Shell, et qu'est-ce qu'un .bash_profile et .bashrc?

52
caesar

Un shell interactif est un shell démarré sans arguments sans option, sauf si -s est spécifié, sans spécifier l'option -c, et dont l'entrée et la sortie d'erreur sont toutes les deux connectées à des terminaux (comme déterminé par isatty (3)), ou un dont le nom commence par l'option -i.

Un shell interactif lit et écrit généralement sur le terminal d'un utilisateur.

[ manuel gnu bash ]

Un shell de connexion est un shell où vous vous connectez. Vous pouvez reconnaître un shell de connexion à partir d'un ps -f listing, 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

Un Shell interactif est celui qui lit les commandes depuis son entrée standard, généralement un terminal.

Par exemple, si vous vous connectez à bash à l'aide d'un émulateur xterm ou terminal comme PuTTY, la session est à la fois un shell de connexion et un shell interactif. Si vous tapez ensuite bash, vous saisissez un shell interactif, mais ce n'est pas un shell de connexion.

Si un script Shell (un fichier contenant des commandes Shell) est exécuté, il ne s'agit ni d'un shell de connexion ni d'un shell interactif.

Les fichiers de démarrage sont hautement personnalisables en bash:

Lorsqu'un shell bash de connexion est invoqué, /etc/profile provient (exécuté dans l'environnement actuel). Après cela, 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, source (exécutez-le)
si ~/.bash_profile exists, source (exécutez-le)
si ~/.bash_login exists, source (exécutez-le)
si ~/.profile exists, source (exécutez-le)

Une fois qu'une correspondance est trouvée, les autres fichiers sont ignorés, même s'ils existent. Le /etc/bashrc le fichier peut être utilisé à la fois par le ~/.bash_profile et le ~/.bashrc des dossiers. Cela signifierait que le /etc/bashrc le fichier provient de toutes les invocations interactives de bash, qu'il s'agisse d'un shell de connexion ou non.

Alors le .bashrc le fichier est également exécuté à chaque fois que vous demandez un nouveau shell interactif. Cela n'inclut pas un script Shell. Normalement, les variables, alias ou fonctions sont placés dans ce fichier.

Les scripts Bash Shell lisent un fichier différent si les instructions le justifient. Si l'utilisateur définit (généralement dans son propre .bash_profile) une variable BASH_ENV qui contient un nom de fichier, les scripts le liront. Si cette variable n'est pas définie (et exportée), les scripts bash ne liront aucun fichier de démarrage.

67
cdarke

Puisque vous savez probablement ce qu'est un "Shell" et que vous l'utilisez, votre question ne vise que la 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, généralement nommés avec "profil" dans leur nom. là sont définis les paramètres de base qui sont dérivés des shells ouverts par la suite (ils ne doivent donc être définis qu'une seule fois).

3
arkascha