history
perintah menunjukkan semua hasil tetapi kita bisa memfilter untuk mendapatkan perintah tertentu menggunakan history | grep searchingCommand
. Ini sangat membantu.
Tetapi masalahnya adalah itu menunjukkan perintah-perintah itu juga yang dimasukkan dengan kesalahan ketik atau yang tidak berhasil. Maka mengidentifikasi yang benar benar-benar menyebalkan. Saya memeriksa tautan ini: Sejarah perintah selektif di terminal? tapi itu bukan solusi saya.
Jadi adakah cara untuk menghapus perintah-perintah itu dari sejarah yang tidak benar pada saat dimasukkan atau nanti?
Jawaban:
Saya ingin menambahkan metode lain untuk memodifikasi (atau menghapus) entri riwayat, yang saya temukan secara tidak sengaja ketika saya bekerja dengan bash:
Untuk mendemonstrasikan ini, mulailah dengan menjalankan tiga perintah berikut dalam bash:
Anda sekarang dapat memilih perintah ini lagi menggunakan tombol panah atau Ctrl+ pdan Ctrl+ n.
Katakanlah Anda ingin memodifikasi dua perintah pertama. Pindahkan riwayat hingga
echo 1
muncul dan ubah keecho 1 - changed
, tetapi JANGAN PRESS ENTER. Jika sekarang Anda bergerak lebih jauh melalui riwayat Anda, baris ini tetap dalam kondisi yang dimodifikasi dan Anda dapat menjauh dari dan kembali ke sana. Sekarang pindah ke barisecho 2
dan ubah keecho 2 - changed
, sekali lagi jangan tekan enter. Untuk menyimpan perubahan pada baris-baris ini, pilih perintah apa saja di histori kecuali untuk keduanya, dan tekan Ctrl+ c.Tentu saja, alih-alih mengubah entri riwayat, Anda juga dapat menghapusnya yang akan menghasilkan baris kosong pada entri itu. Untuk menghapus baris yang saat ini ditampilkan pada prompt, tekan Ctrl+ e(yang melompat ke akhir baris) diikuti oleh Ctrl+ u(yang menghapus teks dari awal baris ke kursor).
Lihat juga https://unix.stackexchange.com/questions/195668/what-can-cause-an-item-to-be-deleted-from-my-bash-history/195726#195726 untuk penjelasan lebih rinci tentang latar belakang teknis.
Cara termudah:
Catatan :
Ini hanya mengubah perintah sesi saat ini. Jika kita ingin mengubah perintah lama dan menyimpan perubahan kita perlu menjalankan perintah berikut sebelum menutup terminal:
sumber
ctrl+r
untuk mencari perintah yang ingin Anda hapus / modifikasi. 2.end
untuk memindahkan perintah dan menghapus / memodifikasi perintah. 3.ctrl+n
untuk pergi ke baris berikutnya dan kemudian 4.ctrl+c
Menggunakan:
untuk menghapus entri riwayat di offset
OFFSET
bahkan sebelum ditambahkan ke file riwayat bash Anda. Untuk menemukan yang benarOFFSET
, Anda hanya perlu menjalankanhistory
perintah. Ini adalah nomor dari awal baris yang berisi entri riwayat yang ingin Anda hapus.Dan untuk menyimpan modifikasi gunakan riwayat:
Lihat lebih detail dalam panduan ini .
sumber
history -w
kata penutup untuk menyimpan perubahan. Juga OFFSET berarti nomor mana yanghistory
ditampilkan. Jika baris yang Anda coba hapus adalah 873 maka gunakanhistory -d 873
.history -w
setelahhistory -d
untuk menyimpan perubahan.Edit file
~/.bash_history
dan hapus sekali dengan salah ketikMisalnya, masukkan perintah ini:
Edit sesuatu yang Anda sukai dan setelah daripada menyimpan file dan restart terminal. Perintah root adalah:
jika ingin menghapus semua
history -c
harus melakukan triksumber :
sumber
.bash_history
?history -c
tidak berfungsi Ketika saya menutup terminal dan membukanya lagi, sejarah tidak terhapus. -1 jawaban Anda-c Clear the history list. This may be combined with the other options to replace the history list completely.
sumberhistory -w
setelahhistory -c
menulis perubahan.Jika Anda ingin segera menghapusnya dari terminal yang sama terlebih dahulu Anda harus menambahkan yang berikut ke file ~ / .bashrc Anda.
dan restart terminal Anda.
Anda dapat menambahkannya di mana saja dalam file .bashrc. Saya telah menambahkan seperti di bawah ini bersama dengan hal-hal terkait sejarah lainnya.
Biasanya selama sesi bash, perintah yang dieksekusi tidak ditulis ke dalam .bash_history sampai sesi diakhiri maka
PROMPT_COMMAND='history -a'
masukkan perintah lalu ke sana ke dalam .bash_history.Sekarang setiap kali Anda membuat kesalahan atau kesalahan dalam suatu perintah dan ingin menghapusnya saat itu juga jalankan saja yang berikut ini
dan tada itu akan dihapus.
Untuk membuatnya lebih sederhana, Anda dapat alias untuk sesuatu yang lebih sederhana dan menggunakannya seperti
Jadi mengeksekusi
rh
akan menghapus perintah yang dieksekusi terakhir dari sejarah.Di atas adalah alias sementara yang hanya berlangsung selama satu sesi. Untuk membuatnya permanen atau terus-menerus ditambahkan
ke .bashrc
CATATAN
Seharusnya tidak ada ruang di kedua sisi
=
Jika Anda Tidak Ingin Alias maka Anda juga bisa melakukan hal berikut
Buat nama commad
rh
dan letakkan di/bin
direktori:Buka file say
rh
dan rekatkan kode berikut, simpan dan tutup:sed -i '$d' ~/.bash_history
Jadikan
rh
executable dan letakkan di/bin
direktori:Sekarang gunakan
rh
perintah untuk menghapus perintah terbaru dari riwayat.sumber
PROMPT_COMMAND='history -a'
di.bashrc
berkas? Dan apa tepatnya yang akan dilakukannya? Saya mencobased -i '$d' ~/.bash_history
ini berfungsi tanpa mengedit.bashrc
!! Tapi alias hal itu tidak berfungsi .. Saya akan menerima jawaban Anda jika Anda hanya menguraikan pertanyaan saya dan membuat alias berfungsi .. :).bash_history
file ..: P apa pun .. Tidak masalah .. Saya membuat perintah sendiri dan meletakkannya di/bin
direktori. Karena karena perintah Anda:sed -i "$d" ~/.bash_history
itu berfungsi dengan baik. Saya menerima jawaban Anda .. :)untuk menghapus beberapa baris (mis. dari 1974 hingga 1990, periksa dengan
history
perintah):perhatikan bahwa nomor baris yang akan dihapus selalu sama, karena Anda menghapus yang terus-menerus dan pergi ke yang berikutnya.
sumber
Jika Anda menggunakan opsi "set -o vi" di bash (sangat berguna untuk mencari kembali dengan tombol Escape), maka Anda dapat mencari baris dan menghapus baris dengan "dd" dengan cara yang sama seperti yang Anda lakukan di "vi".
sumber
j
atauk
setelahdd
membuatnya benar-benar menghapus perintah dari sejarah. Jika saya mengetik perintah lain, atau cukup tekanEnter
, bash tampaknya menganggap itu hanya perintah baru dan itu harus mempertahankan perintah lama dalam sejarah. Menarik juga untuk dicatat bahwa ketika dilakukan dengan benar, perintah akan dihapus, tetapi tidak menghapusnya — hasilnya adalah entri riwayat kosong. Tapi ini cukup bagus untuk menghapus kata sandi yang terpaksa saya ketik di baris perintah, dan jauh lebih mudah daripada jawaban lain, jadi terima kasih banyak untuk memposting ini!Saya memiliki situasi di mana saya memiliki entri berlebihan dalam sejarah bash saya dari Yubikey - mungkin 50 atau lebih, cocok dengan 'ccccc .....'. Idealnya, saya ingin cara menghapus entri yang cocok dengan pola, yang saya kira bisa Anda lakukan dengan sed atau sesuatu, dengan asumsi riwayat Anda mengabaikan kosong.
Lagi pula, saya malas dan akhirnya menggunakan vim, mencari 'cccc' dan menggunakan 'dd' saat bersepeda di setiap pertandingan. Tidak perlu lebih dari satu menit.
sumber