Mengecualikan beberapa perintah agar tidak disimpan dalam bash history

31

Apakah ada cara untuk mengecualikan perintah seperti rm -rf, svn revertagar tidak disimpan dalam bash history? Sebenarnya saya, secara tidak sengaja, telah mengeluarkannya beberapa kali walaupun saya tidak memiliki niat untuk melakukannya, hanya karena saya melakukan sesuatu dengan cepat dan itu terjadi. Karenanya hasil dari kehilangan banyak pekerjaan yang saya lakukan sejauh ini.

Ravi Gupta
sumber
3
Anda mungkin tertarik pada serverfault.com/questions/48769/…
Luc M

Jawaban:

53

Anda mungkin ingin $HISTIGNORE: "Daftar pola yang dipisahkan dengan titik dua yang digunakan untuk memutuskan baris perintah mana yang harus disimpan pada daftar sejarah." Baris ini di ~ / .bashrc Anda harus melakukan pekerjaan:

HISTIGNORE='rm *:svn revert*'

Selain itu, Anda dapat menambahkan spasi di awal perintah untuk mengeluarkannya dari riwayat. Ini berfungsi asalkan $HISTCONTROLmengandung ignorespaceatau ignoreboth, yang merupakan default pada setiap distro yang saya gunakan.

l0b0
sumber
4
ruang adalah bagaimana saya selalu melakukannya.
Rob
Dulu saya sengaja memasukkan tambahan y, setelah semua cp(alias cp -i) selesai. Jadi saya alias ysebagai alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Tapi HISTIGNOREadalah metode yang lebih baik seperti yang terlihat. :) Terima kasih.
anishsane
2
Untuk lebih eksplisit: Anda dapat menambahkan export HISTCONTROL="ignorespace"Anda ~/.bashrcuntuk mengabaikan perintah yang dimulai dengan spasi.
Aidan Feldman
@AidanFeldman tidak default pada macOS
akauppi
CATATAN: ruang harus disertakan ketika kita mengetikkan commandline dan bukan di HISTIGNORE.
Gayan Weerakutti
6

Meskipun sedikit berbeda dari pertanyaan OP, ketika saya sengaja tidak ingin perintah disimpan dalam bash history, saya mengawali mereka dengan spasi. Bekerja di Ubuntu dan variannya, tidak yakin apakah itu bekerja di semua sistem.

k4rtik
sumber
6
Tergantung $HISTCONTROL(lihat jawaban saya).
l0b0
@ l0b0 benar, terima kasih telah menunjukkan.
k4rtik
1

Saya biasanya membunuh bash-instance saya ketika saya telah melakukan hal-hal yang tidak saya inginkan dalam sejarah.

kill -9 $$

$$ mewakili proses saat ini - bash ketika Anda menjalankannya dari shell. Anda dapat menggunakan $ BASHPID, tetapi itu lebih banyak mengetik :-)

Komandan Keen
sumber
2
Beberapa pengaturan Bash (seperti ini ) akan menyimpan histori setelah setiap perintah, dan dalam hal ini tidak akan berfungsi.
l0b0
1
Saya biasa melakukan ini. tetapi pengaturan HISTFILE=/dev/nulladalah pilihan yang lebih baik.
anishsane
hanya HISTFILE=bekerja di bash dan ksh.
kubanczyk
atauunset HISTFILE
Todd Walton