Terkadang, ketika saya menjalankan perintah seperti rm -rf XYZ
, saya tidak ingin ini dicatat dalam riwayat Bash, karena saya mungkin secara tidak sengaja menjalankan perintah yang sama lagi reverse-i-search
. Adakah cara yang baik untuk mencegah hal ini terjadi?
96
bash
dapat digunakan untuk menulis skrip shell (karenanya pemrograman), aspek khusus ini sama sekali tidak ada hubungannya dengan pemrograman (sejarah adalah hal yang hanya bersifat interaktif). Voting untuk ditutup.Jawaban:
Jika Anda telah menyetel
HISTCONTROL
variabel lingkungan keignoreboth
(yang biasanya disetel secara default), perintah dengan karakter spasi utama tidak akan disimpan dalam riwayat (serta duplikat).Sebagai contoh:
$ HISTCONTROL=ignoreboth $ echo test1 $ echo test2 $ history | tail -n2 1015 echo test1 1016 history | tail -n2
Inilah yang
man bash
dikatakan:Lihat juga:
sumber
Di .bashrc / .bash_profile / di mana pun Anda inginkan, letakkan
export HISTIGNORE=' *'
. Kemudian mulai saja perintah yang ingin Anda abaikan dengan satu spasi.$ ls # goes in history $ ls # does not
sumber
HISTCONTROL
variabel lingkungan, yang belum tentuignorespace
ditetapkan.HISTCONTROL
berisiignorespace
, sebenarnya hanya mubazir untuk menyertakan `*` diHISTIGNORE
. Keduanya beroperasi secara independen.Penggunaan yang lebih baik
HISTIGNORE
. Ini memungkinkan Anda untuk menentukan satu set pola yang akan diabaikan (sepertirm
). Ini lebih baik (menurut saya) daripada hanya memasukkan semua sejarah ke dalamnya/dev/null
.sumber
kill -9 $$
Saya tahu itu tidak sebaik jawaban sebelumnya, tetapi ini akan membunuh shell Bash saat ini tanpa menyimpan apa pun, berguna ketika HISTCONTROL tidak disetel secara default, Anda lupa mengaturnya, atau murni dan sederhana Anda lupa meletakkan spasi terdepan dan Anda hanya mengetikkan beberapa sandi dan tidak ingin sandi tersebut tetap ada dalam riwayat secara permanen.
Ini adalah cara cepat, dan sesuatu seperti menghapus file riwayat tidak sebaik karena Anda perlu melakukannya di luar shell penyimpanan riwayat (masuk sebagai pengguna yang berbeda dan gunakan su / sudo, membuat pekerjaan latar belakang, dll.)
sumber
Anda dapat melakukan salah satu dari dua hal:
export HISTFILE=/dev/null
Atau, mulai perintah dengan spasi.
sumber
ignorespace
disetel secara default.HISTFILE
dengan cara ini mencegah penyimpanan riwayat apa pun , dan tidak mencegah perintah ditambahkan ke riwayat dalam memori.Atau
unset HISTFILE
(mirip dengan jawaban sebelumnya hanya lebih pendek: export HISTFILE = / dev / null)
sumber
Saat memulai shell, saya secara eksplisit membersihkan riwayat dari entri yang saya tidak ingin berada di sana. Misalnya, saya tidak ingin ada
rm -rf
dalam riwayat (trauma setelah menghapus direktori yang penuh dengan hasil diproses dalam semalam, hanya dengan satuArrow-Up
+Enter
:)Saya meletakkan cuplikan berikut di file init saya (berfungsi dengan
.zshrc
, juga harus berfungsi dengan.bashrc
)# ... HISTFILE=~/.zshhistory # ... # remove dangerous entries from the shell history temp_histfile="/tmp/$$.temp_histfile" grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile mv $temp_histfile $HISTFILE
sumber