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 siexit
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' |
$-
: contient les options actuelles du shell=~
: opérateur égal+tilde, permet l’utilisation de regex dans une instruction ifi
: option shell ‘Interactif’
Shell de connexion
Pour savoir si vous êtes dans un shell de connexion :
if [[ -o login ]]; then |
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 |
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/
WaM
Merci à WaM pour les explications !