2 votes

Bash: effet de l'exécution de `set -i`?

Aujourd'hui, je lisais la documentation de set, quand j'ai réalisé que ma variable de drapeaux ($-) contenait un drapeau non documenté sur la page d'aide (help set) et sur GNU.org: i.
Après un certain temps, j'ai réussi à trouver cette page qui indique que i signifie interactif.
La première chose que j'ai essayée, bien sûr, était de le désactiver.
Après avoir exécuté set +i, $- ne contenait plus de i, mais à part ça, tout semblait fonctionner comme d'habitude.
De même, mettre set -i dans un fichier de script n'avait aucun effet apparent lors de son exécution.

Alors, ma question: mettre set -i/set +i dans un script ou l'exécuter en ligne de commande a-t-il réellement un effet autre que de modifier la variable $-?

5voto

rici Points 3733

Apparemment, la seule conséquence de l'utilisation de set -i ou set +i sur la ligne de commande une fois que l'interpréteur de commandes est initialisé est de changer la valeur de $-. L'option -i ne peut être utilisée de manière significative que lors de l'invocation de bash pour créer un interpréteur de commandes, auquel cas elle forcera l'interactivité du shell.

Un rapide examen du code source de bash montre que les vérifications d'interactivité pendant l'exécution se réfèrent à la variable globale interactive, qui est définie pendant la séquence d'initialisation et ensuite n'est pas modifiée. Seul set [+-]i et $- utilisent la variable globale forced_interactive. (interactive sera défini sur vrai si forced_interactive est défini ou sinon comme décrit dans man bash.)

0voto

Alex Atkinson Points 3148

Bash-1.14.7-14 a de la documentation pour l'option -i dans la page de manuel. https://bugzilla.redhat.com/show_bug.cgi?id=1129

   -i        Si l'option -i est présente, le shell est interactif.

Un shell interactif lit les commandes à partir de l'entrée utilisateur sur un tty. Entre autres choses, un tel shell lit les fichiers de démarrage lors de l'activation, affiche un indicateur et active le contrôle des tâches par défaut. L'utilisateur peut interagir avec le shell. Un shell exécutant un script est toujours un shell non interactif.

Plus d'informations ici:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell

Ajout : Plus de liens

Une très bonne réponse sur les shells non-login

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

Le manuel de bash sur les shells interactifs

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X