Oui, l'expansion de l'historique est activée par défaut uniquement pour les shells interactifs.
Pour l'activer pour un script shell, écrivez:
set -H
Pour le désactiver dans un shell interactif, écrivez:
set +H
Pour déterminer si l'expansion de l'historique est actuellement activée ou non, utilisez une forme du code suivant:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
En commençant à enseigner une classe shell, j'ai fouillé le manuel de manière approfondie pour essayer de déterminer ce qu'est réellement un "shell interactif". C'est une question tourbillon, alors laissez-moi vous éviter quelques ennuis:
Le shell a de nombreuses options. Certaines de ces options sont initialisées de différentes manières lorsque le shell a un terminal de contrôle (ou lorsqu'il est démarré avec -i
, bla bla, peu importe, voir ci-dessous).
TOUTES les options du shell peuvent être modifiées individuellement.
Un «shell interactif» est un terme trompeur lorsque vous essayez de le définir avec précision. C'est vraiment juste une collection de paramètres d'options.
Il est impossible de répondre à la question de savoir quels paramètres rendent un shell interactif ou non; ça devient ridicule. C'est précisément la même question philosophique que le Navire de Thésée .
Si vous démarrez un shell interactif, mais désactivez ensuite l'expansion de l'historique, utilisez l' --noediting
indicateur, définissez --norc
, désactivez expand_aliases
, etc., etc., dans quel sens le shell est-il interactif? Ou, quand ne devient-il plus interactif? Vous ne pouvez pas répondre à ces questions.
La vérité est que "interactif" n'est qu'une étiquette pratique pour une collection de diverses options de shell. De même «non interactif». Même chose; juste une collection de comportements qui peuvent chacun être modifiés individuellement.
Conclusion: le shell se comporte différemment quand il est démarré "interactivement" par rapport à quand il est démarré "non interactivement". Essayer de définir précisément ces termes après le démarrage est idiot. Il suffit de regarder chaque option individuelle du shell pour comprendre son comportement.
J'avais oublié qu'en plus de mes propres recherches, j'en ai beaucoup parlé sur ce site.