Sementara itu saya berhasil menjaga riwayat saya jauh lebih bersih berkat tips hebat dari Anda yang melibatkan HISTIGNORE
opsi di .bashrc
, menghilangkan semua ll
yang tidak berguna itu atau df -k
garis.
Namun, saya juga mengetahui bahwa HISTIGNORE
opsi ini sangat restriktif , juga.
Misalnya, jika Anda memiliki baris seperti ini (disederhanakan)
HISTIGNORE='ll*:la*:cd*'
Anda tidak hanya akan mengeluarkan ini dari daftar , tetapi juga dari “riwayat langsung” . Anda karena saya ingin menjuluki riwayat volatil yang dapat Anda akses melalui Cursor up /Kursor turun . Cobalah:mereka akan sepenuhnya dihilangkan sekarang, tidak peduli berapa lama Anda menelusuri riwayat perintah Anda dengan tombol kursor tersebut.
Namun, terkadang saya melakukannya membutuhkan garis-garis ini, terutama dengan jalur yang sangat panjang dan rumit yang tidak ingin saya ketik ulang. Di sisi lain, saya ingin baris ini eksklusif ke riwayat hidup saya dan tidak menyimpannya di daftar riwayat karena akan sering berubah.
Apakah ada cara untuk mencapai ini?
Sebagai catatan tambahan, saya telah menemukan bahwa untuk beberapa alasan, riwayat "langsung" dan daftar riwayat terkadang berbeda banyak (lih. Mengapa saya mendapatkan hasil yang berbeda dengan pengguna yang sama dan perintah riwayat).
Jawaban yang Diterima:
Anda dapat menggunakan HISTIGNORE
variabel lingkungan.
Daftar pola yang dipisahkan titik dua yang digunakan untuk memutuskan baris perintah mana yang harus disimpan pada daftar riwayat. Misalnya:
export HISTIGNORE="cd*:ls*"
ini akan mengabaikan semua perintah cd dan ls dari riwayat.
EDIT:
maaf, dalam bacaan pertama saya, saya tidak cukup memperhatikan pertanyaan Anda. Btw, Anda benar:HISTIGNORE
adalah pengaturan yang sangat sulit, dan bash_history akan mengabaikan setiap perintah yang tercantum dalam variabel ini (itu akan mengabaikannya saat Anda menjalankannya, jika sudah ada entri dengan perintah ini ke HISTFILE
Anda mereka akan ditemukan oleh pencarian sejarah terbalik.
Untuk jawaban pertama atas pertanyaan terakhir Anda, riwayat hidup dan tertulis dapat sangat bervariasi jika Anda menggunakan terminal yang berbeda secara bersamaan. Anda dapat mencoba solusi seperti yang dijelaskan di sini:
Pertahankan riwayat bash di beberapa jendela terminal
Apa yang dapat Anda bayangkan adalah solusi di mana Anda menggunakan fungsi di ~/.bash_logout
Anda file, yang akan menghapus entri riwayat yang tidak Anda inginkan.
sesuatu seperti ini harus melakukan apa yang Anda inginkan:
function clear_history(){
# hist_ignore regex, this may be done in a more fancy way,
# such as using an env variable, but anyway
MYHISTIGNORE='^cd:^view:^cat'
# write down history to file
history -w
# create a new tmp file for history
tmpFile=$(mktemp)
cp ${HISTFILE} ${tmpFile}
# use it to filter history
for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do
sed -i "/${myRegex}/d" ${tmpFile}
done
# and copy it back to history file
mv ${tmpFile} ${HISTFILE}
}