Sim, a expansão do histórico é ativada por padrão apenas para shells interativos.
Para habilitá-lo para um script de shell, escreva:
set -H
Para desativá-lo em um shell interativo, escreva:
set +H
Para determinar se a expansão do histórico está ativada ou não, use alguma forma do código a seguir:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Ao começar a ensinar uma classe de shell, eu vasculhei o manual extensivamente para tentar estabelecer o que um "shell interativo" realmente é. É uma questão de hidromassagem, então deixe-me poupar alguns problemas:
O shell tem MUITAS opções. Algumas dessas opções são inicializadas de maneiras diferentes quando o shell tem um terminal de controle (ou quando iniciado com -i
, blah blah, o que for, veja abaixo).
TODAS as opções do shell podem ser alteradas individualmente.
Um "escudo interativo" é um termo enganoso quando você tenta defini-lo com precisão. É realmente apenas uma coleção de configurações de opções.
A pergunta sobre quais configurações tornam um shell interativo ou não é impossível de responder; fica ridículo. É precisamente a mesma questão filosófica que a Nave de Teseu .
Se você iniciar um shell interativo, mas depois desabilitar a expansão do histórico, use o --noediting
flag, defina --norc
, desative expand_aliases
, etc., etc., então em que sentido o shell é interativo? Ou, quando é que não se torna mais interativo? Você não pode responder a essas perguntas.
A verdade é que "interativo" é apenas um rótulo conveniente para uma coleção de várias opções de shell. Da mesma forma, "não interativo". Mesma coisa; apenas uma coleção de comportamentos que podem ser alterados individualmente.
Linha de fundo: o shell se comporta de maneira diferente quando é iniciado "interativamente" versus quando é iniciado "não interativamente". Tentar definir com precisão esses termos após a inicialização é tolo. Basta olhar para cada opção individual do shell para entender seu comportamento.
Eu tinha esquecido que além da minha própria pesquisa, eu postei sobre isso extensivamente neste mesmo site.