Quelle est la différence entre un shell 'Login' et un shell bash 'Interactive'

50

Quelle est la différence entre un shell "Login" et un shell bash "Interactive"? J'ai cité Wikipedia ci-dessous, mais quelqu'un peut-il donner une meilleure réponse?

EDIT: Ceci est un wiki de communauté, alors peut-être que plutôt que de voter pour fermer, vous pourriez donner des exemples de situations qui appellent quel type de $ SHELL

Scripts de démarrage

Lorsque Bash démarre, il exécute les commandes dans divers scripts.

Lorsque Bash est appelé en tant que shell de connexion interactif, 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, puis lit et exécute les commandes à partir de la première qui existe et est lisible.

Lorsqu'un shell de connexion se ferme, Bash lit et exécute les commandes du fichier ~ / .bash_logout, s'il existe.

Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, Bash lit et exécute les commandes de ~ / .bashrc, si ce fichier existe. Cela peut être inhibé en utilisant l'option --norc. L'option de fichier --rcfile forcera Bash à lire et à exécuter les commandes à partir du fichier au lieu de ~ / .bashrc.

gyaresu
la source
J'ai modifié la question pour qu'elle corresponde davantage aux règles du site semi-arsé. Je ne pense pas que je comprendrai jamais le désir de supprimer des informations utiles ...
Gareth
7
Pourquoi les gens votent cette question vers le bas? Cela me semble parfaitement légitime?
duffbeer703
2
Ugh, prenez la réponse de votre question et postez-la comme une réponse. Son ok pour répondre à votre propre question.
derobert
2
C'est une question très valable car la distinction est déroutante. Notez par exemple que lorsque vous vous connectez à un environnement graphique via xdm et que vous exécutez xterm, vous obtenez un shell interactif et les fichiers de démarrage du shell de connexion ne sont pas exécutés.
Pjc50

Réponses:

16

Dans les fichiers de profil de votre shell de connexion, vous pouvez configurer certaines choses que vous utiliserez lors de votre session et qui ne doivent être effectuées qu'une seule fois. Quelques idées:

  • Créez un fichier temporaire contenant l'adresse IP à partir de laquelle vous vous êtes connecté. Vous pourrez ensuite l'inclure dans certains scripts en définissant des règles de pare-feu.
  • lancez ssh-agent, demandez vos clés SSH et stockez les variables d'environnement de l'agent SSH dans un fichier.
  • s'il s'agit d'une machine limitée et que vos collègues veulent être au courant des connexions des autres, écrivez (1) des messages les informant de votre connexion.

Dans les fichiers d'un shell non connecté ( .bashrc), vous devez configurer votre shell:

  • Invite de fantaisie
  • définir des alias
  • définir les options de l'historique
  • définir des fonctions personnalisées
  • variables d'environnement d'exportation, (peut-être PAGER, EDITOR si les paramètres système valent la peine)
  • charger les variables ssh-agent enregistrées dans .bash_profile

Habituellement, vous incluez à .bashrcpartir .bash_profilede ce qui suit. Ensuite, le shell de connexion obtient toutes vos personnalisations et le .bash_profilefichier ne doit pas dupliquer les éléments déjà présents .bashrc.

[[ -f ~/.bashrc ]] && . ~/.bashrc
hayalci
la source
3
Est-ce qu'un shell de connexion est le premier à démarrer lorsque vous êtes à jour sur la machine? Tous les autres shells que vous ouvrez après cela peuvent être interactifs ou non. Un shell qui coule de cron? Ne semble pas interactif, mais s'agit-il d'une connexion? Et si vous n'êtes pas sur la machine? Telles sont les questions qui restent sans réponse
François Beausoleil
4
C’est une réponse que je peux comprendre: linuxquestions.org/questions/linux-general-1/…
François Beausoleil, le