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á ou não ativada no momento, use alguma forma do seguinte código:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Ao começar a dar uma aula de shell, procurei o manual extensivamente para tentar estabelecer o que realmente é um "shell interativo". É uma questão de redemoinho, então deixe-me lhe poupar alguns problemas:
O shell tem muitas opções. Algumas dessas opções são inicializadas de maneiras diferentes quando o shell possui um terminal de controle (ou quando iniciado com -i
blá blá, o que seja, veja abaixo).
TODAS as opções do shell podem ser alteradas individualmente.
Um "shell 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 responder; fica ridículo. É precisamente a mesma pergunta filosófica que a nave de Teseu .
Se você iniciar um shell interativo, mas desativar a expansão do histórico, use o --noediting
sinalizador, defina --norc
, desative expand_aliases
etc., etc., em que sentido o shell é interativo? Ou quando não se torna mais interativo? Você não pode responder a estas 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.
Conclusão: o shell se comporta de maneira diferente quando é iniciado "interativamente" em comparação com quando é iniciado "não interativamente". Tentar definir com precisão esses termos após a inicialização é uma tolice. Basta olhar para cada opção individual do shell para entender seu comportamento.
Eu tinha esquecido que, além de minha própria pesquisa, publiquei extensivamente sobre isso neste mesmo site.