Apakah ada cara untuk membatalkan modifikasi bash history?

9

Dengan menekan ke atas, saya bisa melalui perintah yang dimasukkan sebelumnya. Saya perhatikan bahwa jika saya memodifikasi salah satunya, itu mengubah sejarah. Misalnya, jika saya mengetik:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

sejarah sekarang menunjukkan bahwa perintah kedua adalah echo d, bukan echo b. Bagaimana saya menyimpan yang pertama echo bdalam sejarah?

Misalnya, saya menjalankan perintah yang sangat panjang, dengan banyak opsi. maka saya ingin menjalankannya lagi, dengan perubahan kecil, jadi saya kembali melalui sejarah untuk menemukannya, membuat perubahan, tetapi kemudian menyadari bahwa sebenarnya saya tidak perlu menjalankannya kembali, setelah hanya memikirkan pilihan lain lakukan sebagai gantinya. lalu nanti, saya ingin kembali dan mengingatkan diri sendiri apa perintah yang saya jalankan - tapi tunggu, sejarah sekarang menunjukkan hal yang salah!

Ini muncul sangat jarang, tetapi ketika itu saya merasa sangat menjengkelkan. Apakah ada cara untuk secara otomatis menyimpan sejarah asli?

Benubird
sumber
1
dengan historyAnda dapat melihat semua perintah. Setelah itu Anda dapat memilih apa yang Anda butuhkan. Cangkang mana yang Anda gunakan sekarang?
Hastur
6
Saya tidak bisa mereproduksi itu. Jika saya mengubah c ke d, tekan CTRL + C dan tekan [atas] lagi, masih tertulis echo c.
Martin von Wittich

Jawaban:

6

Cobalah untuk memasukkan ~/.inputrc

 set revert-all-at-newline on

Dalam beberapa kasus, Anda dapat menemukannya di nilai default (Mati).
Itu harus memaksa readlineuntuk membatalkan semua perubahan pada garis sejarah sebelum kembali ketika accept-linedieksekusi (info lebih lanjut man bash).

Edit:
CTRL+c dan set revert-all-at-newline onberfungsi dengan baik sejak bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Tapi:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d
Cepat
sumber
Bagus, ini solusi yang lebih baik. Menariknya, CTRL-c akan benar-benar menyebabkannya mengingat nilai yang dimodifikasi, meskipun sepenuhnya menghapus garis atau panah ke bawah dan kemudian menekan enter atau menjalankan perintah lain akan mengembalikan sejarah.
Dean Serenevy
@DeanSerenevy: Terima kasih saya juga menyukai solusi Anda dan saya mulai menggunakan CTRL-a nanojuga :-)
Hastur
4

Biasanya:

CTRL-a # ENTER

akan melakukannya.

Perintah asli akan diingat jika Anda menjalankan perintah yang dimodifikasi. Tentu saja, Anda tidak ingin benar-benar mengeksekusi, sehingga Anda dapat berkomentar di luar garis #.

Dalam contoh Anda, Anda kemudian akan memiliki dalam sejarah Anda: echo a, echo b, echo c, # echo d.

Dean Serenevy
sumber
1
Anda dapat menekan alt-shift-3untuk mengomentari baris perintah saat ini jika bash Anda menggunakan readline. /insert-commentdi man 3 readline(atau man bash) untuk informasi lebih lanjut.
cychoi