Saya menggunakan bash dan saya ingin menghindari beberapa perintah yang disimpan dalam sejarah.
- Apakah mungkin melakukan itu hanya untuk perintah selanjutnya?
- Apakah mungkin melakukan itu untuk seluruh sesi?
Saya menggunakan bash dan saya ingin menghindari beberapa perintah yang disimpan dalam sejarah.
Jawaban:
dan saya baru ingat jawaban lain, ini adalah jawaban aktual untuk pertanyaan Anda.
jika Anda memiliki "ignorespace" di HISTCONTROL, maka bash tidak akan ingat baris yang dimulai dengan karakter spasi. itu tidak akan muncul bahkan dalam sejarah shell saat ini, apalagi disimpan ke $ HISTFILE.
misalnya saya telah mengekspor HISTCONTROL = 'ignoreboth: erasedups' di my ~ / .bashrc
inilah detail dari halaman bash man:
HISTCONTROL Daftar nilai yang dipisahkan oleh titik dua yang mengendalikan bagaimana perintah disimpan di daftar riwayat. Jika daftar nilai termasuk abaikan, garis yang dimulai dengan karakter spasi tidak disimpan dalam daftar riwayat. Nilai ignoredups menyebabkan garis cocok dengan entri riwayat sebelumnya untuk tidak disimpan. Nilai dari ignoreboth adalah kependekan dari ignorespace dan ignoredups. Nilai dari erasedup menyebabkan semua baris sebelumnya cocok dengan baris saat ini untuk dihapus dari daftar riwayat sebelum baris itu disimpan. Nilai apa pun yang tidak ada dalam daftar di atas diabaikan. Jika HISTCONTROL adalah tidak disetel, atau tidak menyertakan nilai yang valid, semua baris dibaca oleh parser shell disimpan pada daftar history, tergantung nilainya dari HISTIGNORE. Baris kedua dan selanjutnya dari multi-line perintah majemuk tidak diuji, dan ditambahkan ke sejarah terlepas dari nilai HISTCONTROL.
Berikut adalah beberapa pelajaran sejarah yang saya pelajari dari googling:
Anda dapat mengatur riwayat untuk mengabaikan string tertentu. Dalam contoh ini, saya telah mengabaikan perintah ls, passwd dan perintah apa pun yang diawali oleh spasi karakter.
export HISTIGNORE = "ls: passwd:"
Untuk menonaktifkan riwayat untuk sesi Anda, Anda dapat mengeluarkan:
ekspor HISTSIZE = 0
Jika Anda hanya ingin menghapus perintah terakhir dari histori, maka Anda dapat menekan Up-arrow, diikuti oleh Ctrl - U(hapus ke awal baris), lalu Up-arrowlagi.
Anda dapat menghapus setiap baris dari riwayat seperti ini. Cukup gunakan panah atas atau cari atau apa pun untuk menjadikannya baris perintah saat ini sedang diedit, lalu tekan Ctrl - U, dan kemudian Up-arrowatau Down-arrowuntuk pindah ke baris sejarah lain.
Saya menemukan ini secara tidak sengaja hari yang lalu. Saya tidak tahu apakah itu didokumentasikan atau tidak.
Namun, secara umum, tidak terlalu merepotkan untuk tidak menyimpan riwayat shell saat ini sama sekali dengan:
HISTFILE=/dev/null
Anda dapat menghapus HISTFILE
variabel. Dari man bash
:
SEJARAH Nama file di mana sejarah perintah disimpan (lihat HIS- TORY di bawah). Nilai standarnya adalah ~ / .bash_history. Jika tidak disetel, sejarah perintah tidak disimpan ketika shell interaktif keluar.
Saya tidak berpikir ini mencegah perintah muncul di riwayat shell lokal sebelum shell keluar.
Saya melihat bahwa tidak ada yang menulis metode ini, jadi saya akan melakukannya.
history -d $((HISTCMD-1)) && history -d <command or number of command>
history -d
menghapus entri yang disebutkan dari riwayat.
HISTCMD
menyimpan jumlah perintah dari perintah yang akan dieksekusi selanjutnya. Jadi, (HISTCMD-1) mengacu pada perintah yang dieksekusi terakhir.
Saya membuat film bash pendek yang menunjukkan cara kerjanya: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2
Setelah menjalankan perintah dan karena itu juga menghapus perintah itu sendiri maka naik dengan panah tidak akan menampilkan perintah, jadi jika Anda berencana sering menggunakan itu, yang terbaik adalah membuat alias:
alias hc='history -d $((HISTCMD-1)) && history -d $1'
Maka Anda dapat melakukan:
$ hc command