Ya, ekspansi riwayat diaktifkan secara default hanya untuk shell interaktif.
Untuk mengaktifkannya untuk skrip shell, tulis:
set -H
Untuk menonaktifkannya di shell interaktif, tulis:
set +H
Untuk menentukan apakah ekspansi riwayat saat ini diaktifkan atau tidak, gunakan beberapa bentuk kode berikut:
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
Dalam mulai mengajar kelas shell, saya menggali manual secara ekstensif untuk mencoba menentukan apakah "shell interaktif" itu sebenarnya. Ini pertanyaan pusaran air, jadi izinkan saya menyelamatkan Anda dari beberapa masalah:
Shell memiliki opsi BANYAK. Beberapa opsi ini diinisialisasi dengan cara yang berbeda ketika shell memiliki terminal pengendali (atau ketika dimulai dengan -i
, bla bla, apa pun, lihat di bawah).
SEMUA opsi shell dapat diubah secara individual.
"Shell interaktif" adalah istilah yang menipu ketika Anda mencoba mendefinisikannya dengan tepat. Ini benar-benar hanya kumpulan pengaturan opsi.
Pertanyaan tentang pengaturan mana yang membuat shell menjadi interaktif atau tidak tidak mungkin dijawab; itu menjadi konyol. Hal ini justru pertanyaan filosofis sama dengan Kapal Theseus .
Jika Anda memulai shell interaktif, tetapi kemudian menonaktifkan ekspansi histori, gunakan --noediting
flag, set --norc
, matikan expand_aliases
, dll, dll., Lalu dalam arti apa shell itu interaktif? Atau, kapan itu menjadi tidak interaktif lagi? Anda tidak dapat menjawab pertanyaan-pertanyaan ini.
Yang benar adalah bahwa "interaktif" hanyalah label yang nyaman untuk koleksi berbagai opsi shell. Demikian juga "non-interaktif." Hal yang sama; hanya kumpulan perilaku yang masing-masing dapat diubah secara individual.
Intinya: shell berperilaku berbeda ketika dimulai "secara interaktif" versus ketika itu dimulai "non-interaktif." Mencoba mendefinisikan istilah-istilah ini secara tepat setelah memulai adalah konyol. Lihat saja masing-masing opsi shell untuk memahami perilakunya.
Saya lupa bahwa selain penelitian saya sendiri, saya mempostingnya secara luas di situs ini.