Bagaimana cara menghapus satu baris dari histori?


Jawaban:


340

Tindakan pencegahan

Jika Anda ingin menjalankan perintah tanpa menyimpannya dalam sejarah, tambahkan itu dengan ruang ekstra

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

Untuk ini bekerja Anda perlu baik ignorespaceatau ignorebothdi HISTCONTROL. Misalnya, jalankan

HISTCONTROL=ignorespace

Untuk membuat pengaturan ini terus-menerus, letakkan di Anda .bashrc.

Pembersihan post-mortem

Jika Anda sudah menjalankan perintah, dan ingin menghapusnya dari histori, gunakan dulu

history

untuk menampilkan daftar perintah dalam riwayat Anda. Temukan angka di sebelah nomor yang ingin Anda hapus (mis. 1234) dan jalankan

history -d 1234

Selain itu, jika baris yang ingin Anda hapus telah ditulis ke $ HISTFILE Anda (yang biasanya terjadi ketika Anda mengakhiri sesi secara default), Anda perlu menulis kembali ke $ HISTFILE, atau baris tersebut akan muncul kembali ketika Anda membuka yang baru sidang:

history -w

Itu berhasil. Saya pikir kita perlu sumber ~ / .bashrc setelah memodifikasinya ...
B Seven

3
@ jw013 Saya mengatur PROMPT_COMMAND ke history -a, dalam hal ini sudah ditulis ke file sejarah, daripada keluar di bawah konfigurasi normal. Khususnya: mywiki.wooledge.org/BashFAQ/088
jordanm

5
Setelah menghapus satu baris, Anda perlu menuliskan riwayat saat ini ke $ HISTFILE Anda history -w. Kalau tidak, saat Anda keluar, baris yang dihapus masih ada!
Felipe Alvarez

1
Beri +1 pada komentar di atas; menggunakan history -wsetelah history -d {num}itu persis apa yang saya butuhkan - bahwa berita gembira kritis harus ditambahkan ke jawabannya, jika tidak pengguna mungkin berpikir temp delete dari shell saat ini sebenarnya permanen.
michael

1
@ BobStein history -wdiperlukan untuk entri yang sudah ditulis ke .bash_historyfile. Cara mereproduksi (mis. Pada CentOS 7 dengan konfigurasi stok): 1. login 2. masukkan perintah echo foo3. logout 4. login lagi 5. hapus entri untuk echo foo6. logout 7. login lagi: entri masih ada. Bergantung pada bagaimana Anda mengonfigurasi riwayat bash Anda, mungkin Anda dapat mereproduksi masalah ini dengan cara lain - yaitu jika Anda memprovokasi penulisan riwayat sebelum keluar.
maxschlepzig

53
  1. Untuk menghapus semua riwayat Anda, gunakan

    history -c
  2. Untuk menghapus satu baris, gunakan

    history -d linenumber

6

Saya memiliki ini di saya ~/.bashrc, yang membuat perintah $ forgetmenghapus perintah sebelumnya dari sejarah

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}

Tampaknya agak rumit. Bukankah history -d $( history | tail -n 1 | cut -f 1 -d " " )lebih sederhana?
seumasmac

1
history | tail -n1adalah historyperintah itu sendiri, jadi menghapus nomor itu mendapat entri yang salah. Namun, history -d $( history | awk 'END{print $1-1}' )gabungkan garis pilih, pilih bidang, dan pengurangan.
dave_thompson_085

Adakah yang bisa dibantu seseorang dengan portin ini untuk zshell?
Alex S

6

Anda selalu dapat mengedit dan menghapus entri ~/.bash_history, berguna saat Anda ingin menghapus satu entri atau lebih dari satu entri


2
Kemungkinan entri ini akan diperkenalkan kembali ketika Anda keluar dari shell.
l0b0

5

Jika Anda ingin melupakan seluruh sesi bash, Anda dapat killmelakukan proses bash saat ini. Karena variabel tersebut $$menahan pidshell saat ini, Anda dapat melakukan:

kill -9 $$

1

Anda perlu menulis perubahan setelah membersihkan riwayat. Dan jika Anda tidak ingin memiliki perintah penghapusan riwayat dalam riwayat Anda maka Anda perlu menjalankan perintah seperti itu:

history -c && history -w && logout

Semoga berhasil.


-1
Adding another point suppose if you want to delete a range of history lines

You can use below script. 

Below example will delete history output from line 1 to line 150.

for i in `history | awk 'NR > 1 && NR <=150{print   $1}'`; do history -d $i; done
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.