Quand je ssh dans une machine ubuntu, quel type de shell suis-je en train d'utiliser

Je continue à lire des shells interactifs, non interactifs, de connexion et non identifiés.

(C'est dans le contexte de lequel des fichiers .bash * est lue).

Je ne comprends pas ce que chaque type de coque est, alors commençons par les bases.

Si je ssh de mon mac à ma machine ubuntu, quel type de shell est-il déclenché?

Si vous SSH dans votre boîte Ubuntu, vous obtenez un shell de connexion interactif. Voici la différence:

  • Interactif ou non interactif: tout shell dans lequel vous pouvez saisir une invite est interactif. En fait, de nombreux scripts testent la variable $PS1 qui contient la chaîne d'invite pour savoir s'ils sont interactifs. Si un shell exécute un script shell, il n'est pas interactif.

    Donc, si vous effectuez ssh yourbox.example.com , vous obtiendrez un shell interactif, en supposant les paramètres par défaut, alors que si vous faites ssh yourbox.example.com mighty_shellscript.sh , vous finirez par un shell non interactif et Votre session SSH se terminera lorsque le script se terminera.

  • Connexion ou non-connexion: lorsque vous vous connectez à partir de la console ou à distance (comme SSH), ou lorsque vous passez l'option -l à bash , vous obtenez un shell de connexion. Sinon, par exemple lorsque vous ouvrez une fenêtre de terminal, vous obtenez un shell sans connexion.

    Pour vérifier si un shell est un shell de connexion, vérifiez si son nom de commande est -bash au lieu de bash :

     ps -ef | grep [b]ash 

Vous obtenez un shell de connexion interactif. Mais ne le prenez pas pour acquis, vérifiez-le vous-même.

Cela vous indique que vous avez un shell de connexion (de man bash ):

 # shopt | grep login login_shell on 

Cela vous indique que vous avez une coque interactive, cherchez i (from man bash ):

 # echo $- himBH 

Le shell de connexion interactif que vous avez a lu /etc/profile et than de ~/.bash_profile , ~/.bash_login et ~/.profile , comme expliqué dans man bash :

Lorsque bash est invoqué comme un shell de connexion interactif , ou comme un shell non interactif avec l'option –login, il lit et exécute les commandes à partir 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 du premier qui existe et est lisible. L'option –noprofile peut être utilisée lorsque le shell commence à inhiber ce comportement.

La page man ssh (1) dit:

Si la commande est spécifiée, elle est exécutée sur l'hôte distant au lieu d'un shell de connexion.

et

Lorsque l'identité de l'utilisateur a été acceptée par le serveur, le serveur exécute la commande donnée, ou se connecte à la machine et donne à l'utilisateur un shell normal sur la machine distante.

Ceux-ci me suggèrent que le shell que vous obtenez est un shell de connexion.

Essayez cette commande.

 [Max @ localhost ~] $ echo $ SHELL
 / Bin / bash

Vous obtenez cette sortie car votre type de shell est stocké dans cette variable SHELL .

Pour connaître votre type d'environnement, saisissez cette commande

 [Max @ localhost ~] $ env
 .
 .
 .
 HOSTNAME = localhost.localdomain
 SHELL = / bin / bash
 HISTSIZE = 1000
 UTILISATEUR = max.
 .
 .
 .

En tapant echo $SHELL il imprimera la valeur, quelle qu'elle soit, stockée ici

Cette valeur est mise à jour pour chaque démarrage