Bagaimana cara menghentikan bash mengedit histori ketika saya menggunakan kembali dan memodifikasi entri?

20

Beberapa contoh bash mengubah histori perintah ketika Anda menggunakan kembali dan mengedit perintah sebelumnya, yang lain tampaknya tidak. Saya telah mencari dan mencari tetapi tidak dapat menemukan apa pun yang mengatakan bagaimana mencegah perintah dalam sejarah agar tidak dimodifikasi ketika mereka digunakan kembali dan diedit.

Ada pertanyaan seperti ini , tetapi yang sepertinya mengatakan bagaimana mengatasi sejarah yang sedang diedit. Saya baru-baru ini menemukan sebuah instance dari bash yang mengedit riwayat ketika Anda menggunakan kembali perintah - semua shell bash sebelumnya yang saya gunakan telah (sejauh yang saya perhatikan) telah dikonfigurasi untuk tidak mengubah riwayat ketika Anda menggunakan kembali dan edit sebuah perintah. (Mungkin aku hanya belum memperhatikan sejarah cangkangku selama 15 tahun terakhir atau lebih ...)

Jadi itu mungkin pertanyaan terbaik: BISAKAH saya bisa mengatakan kepada bash TIDAK PERNAH untuk memodifikasi sejarah - dan jika demikian, bagaimana?

Richard Wiseman
sumber
Anda dapat menggunakannya history -puntuk melakukan ekspansi riwayat tanpa memengaruhi file riwayat. Anda dapat melakukannya history -suntuk melakukan hal yang sama dan menambahkan ke riwayat tanpa eksekusi. Anda bisa lakukan HISTIGNORE='start of a command I never want in history.*:command2.*'untuk menjaga perintah tertentu dari sejarah.
mikeserv
1
Bukankah set revert-all-at-newline ondalam pertanyaan yang Anda tautkan menyelesaikan masalah Anda? Bisakah Anda menunjukkan cara mereproduksi masalah? Perhatikan bahwa Anda juga dapat menggunakan zshperilaku yang lebih sesuai dengan yang Anda inginkan.
Stéphane Chazelas
@ mikeserv Melihat halaman manual, history -padalah sesuatu yang harus saya lakukan untuk setiap perintah yang ingin saya gunakan kembali - apakah itu benar? Jika demikian, itu tidak cukup yang saya cari. Seperti yang saya sebutkan, saya telah menggunakan contoh bash yang tidak pernah memodifikasi histori ketika sebuah perintah digunakan kembali dan diedit.
Richard Wiseman
@ StéphaneChazelas Tidak, saya kira tidak revert-all-at-newlinecukup yang saya butuhkan. Jika saya mengedit perintah dan menekan CTRL-C untuk membatalkannya, saya juga tidak ingin itu mempengaruhi sejarah. Saya belum pernah sebelumnya mengkonfigurasi bash untuk tidak mengubah sejarah, yang merupakan bagian dari alasan saya bingung mengapa kadang-kadang instalasi baru berperilaku dalam satu cara dan kadang-kadang di lain. Ngomong-ngomong, pada sebuah instance yang tidak mengedit histori pada reuse perintah, sebuah bind -V | grep revertmengindikasikan yang revert-all-at-newlinediatur ke 'off'.
Richard Wiseman
2
Sebenarnya ini tidak ada hubungannya sama sekali bash. Ini semua tentang readline. Ada implementasi readlineperpustakaan yang berbeda , dan juga memiliki set pengaturan sendiri (BANYAK dari mereka) dan file konfigurasinya sendiri. Saya tidak yakin persis apakah ini merupakan pengaturan atau hanya perbedaan implementasi, tetapi Anda harus mencari dalam dokumentasi yang berhubungan dengan readline, bukan bash.
orion

Jawaban:

9

Ternyata revert-all-at-newlineadalah jawabannya. Saya perlu memasukkan set revert-all-at-newline ondalam ~/.inputrcfile saya , karena menggunakan setperintah di bash prompt tidak berpengaruh. (Kemudian, tentu saja, saya harus memulai shell baru.)

Juga, saya menemukan yang ~/.inputrcdimuat bukan /etc/inputrc jika ada, yang berarti bahwa setiap default yang ditentukan dalam yang terakhir tidak lagi aktif ketika Anda membuat ~/.inputrc. Untuk memperbaiki ini, mulailah ~/.inputrcdengan $include /etc/inputrc.

Terima kasih kepada @ StéphaneChazelas karena mengarahkan saya ke arah yang benar.

Richard Wiseman
sumber
0

Di ~ / .bashrc Anda dapat menambahkan

shopt -s histappend
Jeff Coleman
sumber
Terima kasih, tetapi itu tidak berpengaruh pada masalah yang saya alami. Saya baru saja memeriksa dan histappendaktif tetapi riwayat saya masih menunjukkan pengeditan untuk perintah sebelumnya.
Richard Wiseman
Saya telah mencari halaman bash man dan saya menemukan aturan untuk sejarah pengeditan Nama Perintah Readline Ini cukup deskriptif tapi saya tidak melihat opsi untuk apa yang Anda inginkan kecuali untuk mungkin: redraw-current-line Refresh the current baris.
Jeff Coleman
Ada juga opsi revert-all-at-newline yang secara default mati
Jeff Coleman