C'est beaucoup plus qu'une simple histoire d'environnement et donc simplement du
PATH
Pour être sûr qu'il n'y ait aucune imbrication de shell ou de sous-shell
le retour de la commande
echo ${0::1} doit être un simple tiret
Dès lors, on pourra être sûr d'être dans un login shell bien "propre".
=======
Voir sous debian 10 (buster), les différences concernant la valeur de quelques variables d'environnement
une fois connecté par
su et
su -
et en lançant la ligne de commande suivante :
Code : Tout sélectionner
echo -e "\n\$0\t\t: $0\n\$HOME\t\t: $HOME\n\$PWD\t\t: $PWD\n\$SHELL\t\t: $SHELL\n\$USER\t\t: $USER\n\$LOGNAME\t: $LOGNAME\n\$PATH\t\t: $PATH\n"
Code : Tout sélectionner
michel@debgnom:~$ su
Mot de passe :
root@debgnom:/home/michel# echo -e "\n\$0\t\t: $0\n\$HOME\t\t: $HOME\n\$PWD\t\t: $PWD\n\$SHELL\t\t: $SHELL\n\$USER\t\t: $USER\n\$LOGNAME\t: $LOGNAME\n\$PATH\t\t: $PATH\n"
$0 : bash
$HOME : /root
$PWD : /home/michel
$SHELL : /bin/bash
$USER : michel
$LOGNAME : michel
$PATH : /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
root@debgnom:/home/michel# exit
michel@debgnom:~$
Code : Tout sélectionner
michel@debgnom:~$ su -c 'echo -e "\n\$0\t\t: $0\n\$HOME\t\t: $HOME\n\$PWD\t\t: $PWD\n\$SHELL\t\t: $SHELL\n\$USER\t\t: $USER\n\$LOGNAME\t: $LOGNAME\n\$PATH\t\t: $PATH\n"'
Mot de passe :
$0 : bash
$HOME : /root
$PWD : /home/michel
$SHELL : /bin/bash
$USER : michel
$LOGNAME : michel
$PATH : /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
michel@debgnom:~$
Code : Tout sélectionner
michel@debgnom:~$ su -
Mot de passe :
root@debgnom:~# echo -e "\n\$0\t\t: $0\n\$HOME\t\t: $HOME\n\$PWD\t\t: $PWD\n\$SHELL\t\t: $SHELL\n\$USER\t\t: $USER\n\$LOGNAME\t: $LOGNAME\n\$PATH\t\t: $PATH\n"
$0 : -bash
$HOME : /root
$PWD : /root
$SHELL : /bin/bash
$USER : root
$LOGNAME : root
$PATH : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@debgnom:~# déconnexion
michel@debgnom:~$
Code : Tout sélectionner
michel@debgnom:~$ su - -c 'echo -e "\n\$0\t\t: $0\n\$HOME\t\t: $HOME\n\$PWD\t\t: $PWD\n\$SHELL\t\t: $SHELL\n\$USER\t\t: $USER\n\$LOGNAME\t: $LOGNAME\n\$PATH\t\t: $PATH\n"'
Mot de passe :
$0 : -bash
$HOME : /root
$PWD : /root
$SHELL : /bin/bash
$USER : root
$LOGNAME : root
$PATH : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
michel@debgnom:~$
=======
Une autre petite différence dont je viens juste de m’apercevoir :
Par habitude, tant qu'il n'y a rien dans la ligne de commande
par flemme d'entrer la commande
exit
je quitte le shell en utilisant le raccourci clavier
Ctrl-d
Dans le cas du shell obtenu par un
su sans le tiret
quand le raccourci clavier
Ctrl-d est exécuté, c'est le mot
exit qui s'affiche,
mais depuis un shell obtenu par un
su - (=> avec le tiret)
quand le raccourci clavier
Ctrl-d est exécuté, c'est le mot
déconnexion qui s'affiche.