Saya entah bagaimana berhasil memengaruhi perintah asli, yaitu edit saya menggantikan perintah asli di sejarah.
Benar. Jika Anda kembali ke riwayat dan mengedit baris tanpa menekan kembali untuk menjalankan perintah tetapi alih-alih pindah ke entri riwayat lain, Anda baru saja mengedit entri sejarah. Jika Anda kemudian mencantumkan riwayat Anda, Anda akan melihat *
pada baris yang menunjukkan bahwa Anda telah mengeditnya. Saya menemukan "fitur" ini sangat membuat frustrasi. Orang lain telah memberikan contoh yang baik tentang cara mereproduksi ini.
Tujuan saya adalah untuk menghindari hal ini, jadi setiap pengeditan pada perintah sebelumnya selalu ditambahkan ke riwayat dan tidak pernah menggantikan yang asli.
Saya juga ingin menonaktifkannya. Saya menemukan solusinya melalui jawaban ini di unix.stackexchange.
Untuk meringkas, Anda perlu mengaktifkan revert-all-at-newline
pengaturan readline yang dinonaktifkan secara default. Jika pengaturan aktif maka bash akan mengembalikan setiap perubahan yang Anda buat pada riwayat saat Anda menjalankan perintah berikutnya.
Untuk mengaktifkan pengaturan ini di shell Anda, Anda harus menambahkan kode berikut ke ~/.inputrc
Anda file dan kemudian restart shell Anda:
$include /etc/inputrc
set revert-all-at-newline on
Baris pertama diperlukan karena saya rasa jika Anda memberikan .inputrc
Anda sendiri file /etc/inputrc
default file tidak disertakan yang mungkin bukan yang Anda inginkan.
Jika Anda kembali ke beberapa perintah sebelumnya dan mengeditnya, tetapi kemudian JANGAN jalankan (alih-alih menggunakan perintah riwayat untuk membuka beberapa perintah lain dan menjalankannya), hasil edit akan tetap ada di daftar riwayat Anda.
Menekan Ctrl + C , setelah diedit, melawan perilaku ini. Itu meninggalkan perintah asli dalam kebijaksanaan yaitu membatalkan mengingat suntingan ke aslinya.
Inilah jawaban saya sendiri, harap perbaiki atau berikan detail lebih lanjut jika Anda bisa.
Saat opsi "vi" disetel di bash ("set -o vi" -- "Gunakan antarmuka pengeditan baris perintah bergaya vi"), ada dua mode pengeditan perintah dari histori.
Mode pertama (sebut saja "basic") adalah ketika Anda langsung mulai mengedit menggunakan tombol Backspace, Del, dan karakter.
Mode lainnya adalah "mode vi", yang dimasukkan saat Anda menekan Esc.
Jika Anda ingin menjaga agar riwayat Anda tetap utuh, JANGAN gunakan kedua mode dalam pengeditan yang sama. Saya tidak tahu persis bagaimana bash bekerja, tetapi Anda dapat memikirkannya seperti ini:
- Memasuki "mode vi" menerapkan setiap perubahan yang dilakukan dalam "mode dasar" ke perintah awal, dan membuat salinan perintah yang dapat Anda edit lebih lanjut menggunakan perintah bergaya vi.
- Perubahan diterapkan saat Anda menekan Enter (eksekusi), Atas, Bawah, atau j,k (pindah ke perintah lain dalam riwayat).
- Perubahan tidak diterapkan jika Anda menekan Ctrl-C.
- Menggunakan pengeditan dasar atau vi-style SAJA tidak memengaruhi perintah asli dalam riwayat.