Deduplikasi sejarah Bash menyebabkan perilaku multi-shell yang berbahaya

1

Saya menggunakan kode berikut di .bash_profile saya untuk memfilter dan menduplikat riwayat bash saya:

shopt -s histappend
HISTSIZE=100000
HISTFILESIZE=100000
HISTCONTROL=ignoredups:erasedups
PROMPT_COMMAND="history -a;history -c;history -r;$PROMPT_COMMAND"

Ini bekerja sangat baik, namun efek samping berikut dihasilkan:

Katakanlah saya memiliki dua terminal / tab terbuka:

  • Tab ke-1: folder: ~, perintah terakhir dijalankan: wget big_file... (atau apapun yang panjang)
  • Tab ke-2: folder: beberapa folder temp acak, jalankan perintah terakhir: rm -rf *

Sekarang jika saya pergi dari tab ke-2 dan ke-1, dan tekan tombol ATAS, itu menjalankan kembali perintah terakhir, seperti semuanya OK

Sekarang sampai pada bit yang berbahaya: jika saya menekan UP lagi, itu akan menyisipkan rm -rf * dan jika saya tidak menyadarinya saat saya baru saja menghapus semua data saya.

Dapatkah Anda merekomendasikan saya pengaturan .bash_profile untuk histori yang melakukan de-duplikasi / penyaringan tetapi tidak memungkinkan hal-hal seperti itu terjadi?

hyperknot
sumber
Hapus PROMPT_COMMAND.
choroba
Tetapi apakah itu akan tetap memastikan bahwa garis-garis dideduplikasi dan yang terbaru disimpan di bagian bawah?
hyperknot
Garis akan konsisten di setiap terminal secara terpisah.
choroba
Saya percaya memiliki -a ada berguna untuk menghemat shell secara teratur, tetapi -c dan -r adalah yang menyebabkan intermixing. Satu-satunya pertanyaan saya adalah apakah saya harus menggunakan -a, -n atau -w.
hyperknot

Jawaban:

0

Kamu bisa memakai HISTIGNORE untuk mengabaikan yang Anda anggap berbahaya.

HISTIGNORE='rm -rf *:dangercmd -c 2:echo and so on' 
rm-vanda
sumber