Shell Interactif ou Shell de connexion

Un shell sert basiquement à exécuter des commandes sans se soucier de savoir si elles sont dans un fichier ou tapées directement dans le terminal, cependant, quelles sont les différences entre un shell interactif/non-interactif et un shell de connexion ?

  • Shell interactif : lorsque vous tapez une commande directement dans le terminal et attendez qu’elle s’exécute.

  • Shell non-interactif : lorsque le shell lit les commandes d’un fichier.

  • Shell de connexion : login + mot de passe, la commande logout est possible ici (même si exit aussi, comme pour le shell interactif). Le Shell de connexion lance un shell interactif pour taper des commandes.

Déterminer le shell

Shell Interactif/non-Interactif

Pour vérifier si vous êtes dans un shell interactif :

# [[ $- == *i* ]] && echo 'Interactif' || echo 'non-interactif'

Ou encore :

# ! [[ $- =~ i ]] && echo 'test'
# [[ $- =~ i ]] && echo 'test'
test

$- : contient les options actuelles du shell
=~ : opérateur égal+tilde, permet l’utilisation de regex dans une instruction if
i : option shell ‘Interactif’

Shell de connexion

Pour savoir si vous êtes dans un shell de connexion :

if [[ -o login ]]; then
echo 'Login Shell'
else
echo 'NOT Login Shell'
fi

Ou encore, avec shopt :

# shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'

Vous devrez utiliser logout pour quitter la session, si vous utilisez un exit, vous aurez ce message d’erreur :

# logout
bash: logout: ce n'est pas un shell de connexion : utilisez « exit »

Documentation

https://stacklima.com/shell-scripting-shell-interactif-et-non-interactif/
https://qastack.fr/unix/26676/how-to-check-if-a-shell-is-login-interactive-batch
https://serverfault.com/questions/8882/what-is-the-difference-between-a-login-and-an-interactive-bash-shell
https://zsh.sourceforge.io/Guide/zshguide02.html#l7
https://www.geeksforgeeks.org/shell-scripting-shopt-command/

Remerciements

WaM

Merci à WaM pour les explications !

> Partager <