Sí, la expansión del historial está habilitada de manera predeterminada solo para shells interactivos.
Para habilitarlo para un script de shell, escriba:
set -H
Para deshabilitarlo en un shell interactivo, escriba:
set +H
Para determinar si la expansión del historial está actualmente habilitada o no, use alguna forma del siguiente código:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Al comenzar a enseñar una clase de shell, busqué exhaustivamente el manual para tratar de establecer qué es realmente un "shell interactivo". Es una pregunta de hidromasaje, así que déjame ahorrarte algunos problemas:
La carcasa tiene MUCHAS opciones. Algunas de estas opciones se inicializan de diferentes maneras cuando el shell tiene un terminal de control (o cuando se inicia con -i
, bla, bla, lo que sea, ver más abajo).
TODAS las opciones del shell se pueden cambiar individualmente.
Un "shell interactivo" es un término engañoso cuando intenta definirlo con precisión. Realmente es solo una colección de configuraciones de opciones.
La pregunta sobre qué configuraciones hacen que un shell sea interactivo o no es imposible de responder; Se pone ridículo. Es precisamente la misma pregunta filosófica que la Nave de Teseo .
Si inicia un shell interactivo, pero luego deshabilita la expansión del historial, usa el --noediting
indicador, establece --norc
, apaga expand_aliases
, etc., etc., ¿en qué sentido es el shell interactivo? O, ¿cuándo deja de ser interactivo? No puedes responder estas preguntas.
La verdad es que "interactivo" es solo una etiqueta conveniente para una colección de varias opciones de shell. Del mismo modo "no interactivo". La misma cosa; solo una colección de comportamientos que pueden cambiarse individualmente.
En pocas palabras: el shell se comporta de manera diferente cuando se inicia "interactivamente" frente a cuando se inicia "no interactivamente". Intentar definir con precisión estos términos después de la puesta en marcha es una tontería. Basta con mirar cada opción individual del shell para comprender su comportamiento.
Había olvidado que, además de mi propia investigación, publiqué mucho sobre esto en este mismo sitio.