Sì, l'espansione della cronologia è abilitata per impostazione predefinita solo per le shell interattive.
Per abilitarlo per uno script di shell, scrivi:
set -H
Per disabilitarlo in una shell interattiva, scrivi:
set +H
Per determinare se l'espansione della cronologia è attualmente abilitata, utilizzare una qualche forma del seguente codice:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Iniziando a insegnare una classe di shell, ho approfondito il manuale per cercare di stabilire cosa sia realmente una "shell interattiva". È una domanda idromassaggio, quindi lascia che ti risparmi qualche problema:
La shell ha MOLTE opzioni. Alcune di queste opzioni sono inizializzate in diversi modi quando la shell ha un terminale di controllo (o quando inizia con -i
, blah blah, qualunque cosa, vedi sotto).
TUTTE le opzioni della shell possono essere modificate individualmente.
Una "shell interattiva" è un termine ingannevole quando si tenta di definirlo con precisione. È davvero solo una raccolta di impostazioni delle opzioni.
Alla domanda su quali impostazioni rendono interattiva o meno una shell è impossibile rispondere; diventa ridicolo. È esattamente la stessa domanda filosofica della Nave di Teseo .
Se si avvia una shell interattiva, ma si disabilita l'espansione della cronologia, si usa il --noediting
flag, si imposta --norc
, si spegne expand_aliases
, ecc., Ecc., In che senso la shell è interattiva? Oppure, quando non diventa più interattivo? Non puoi rispondere a queste domande.
La verità è che "interattivo" è solo un'etichetta conveniente per una raccolta di varie opzioni di shell. Allo stesso modo "non interattivo". Stessa cosa; solo una raccolta di comportamenti che possono essere cambiati singolarmente.
In conclusione: la shell si comporta in modo diverso quando viene avviata "in modo interattivo" rispetto a quando viene avviata "in modo non interattivo". Cercare di definire con precisione questi termini dopo l'avvio è sciocco. Basta guardare ogni singola opzione della shell per capirne il comportamento.
Avevo dimenticato che oltre alla mia ricerca, l'ho pubblicato ampiamente su questo stesso sito.