Saya sangat menikmati menggunakan control+r
untuk mencari riwayat perintah saya secara rekursif. Saya telah menemukan beberapa opsi bagus yang ingin saya gunakan dengannya:
# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace
# keep the last 5000 entries
export HISTSIZE=5000
# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend
Satu-satunya masalah bagi saya adalah erasedups
hanya menghapus duplikat berurutan – sehingga dengan string perintah ini:
ls
cd ~
ls
ls
perintah sebenarnya akan direkam dua kali. Saya telah berpikir untuk menjalankan w/ cron secara berkala:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Ini akan mencapai penghapusan duplikat, tetapi sayangnya pesanan tidak akan dipertahankan. Jika saya tidak sort
filenya dulu saya tidak percaya uniq
dapat bekerja dengan baik.
Bagaimana cara menghapus duplikat di .bash_history saya, menjaga ketertiban?
Kredit Ekstra:
Apakah ada masalah dengan menimpa .bash_history
file melalui skrip? Misalnya, jika Anda menghapus file log apache, saya pikir Anda perlu mengirim sinyal nohup / reset dengan kill
untuk membuatnya flush koneksi ke file. Jika demikian halnya dengan .bash_history
file, mungkin saya entah bagaimana bisa menggunakan ps
untuk memeriksa dan memastikan tidak ada sesi yang terhubung sebelum skrip pemfilteran dijalankan?
Jawaban yang Diterima:
Mengurutkan riwayat
Perintah ini bekerja seperti sort|uniq
, tetapi garis tetap di tempatnya
nl|sort -k 2|uniq -f 1|sort -n|cut -f 2
Pada dasarnya, awali setiap baris nomornya. Setelah sort|uniq
-ing, semua baris diurutkan kembali sesuai dengan urutan aslinya (menggunakan bidang nomor baris) dan bidang nomor baris dihapus dari baris.
Solusi ini memiliki kelemahan bahwa tidak terdefinisi perwakilan kelas garis yang sama mana yang akan membuatnya dalam output dan oleh karena itu posisinya dalam output akhir tidak terdefinisi. Namun, jika perwakilan terbaru harus dipilih, Anda dapat sort
masukan dengan kunci kedua:
nl|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2
Mengelola .bash_history
Untuk membaca ulang dan menulis kembali sejarah, Anda dapat menggunakan history -a
dan history -w
masing-masing.