Bagaimana cara kerja perintah sejarah?

8

Ketika saya mengetik perintah apa pun di terminal, itu tidak muncul di ~/.bash_historyfile saya sampai saya keluar dari sesi saya.

Juga, ketika saya mengedit ~/.bash_historyfile saya secara manual (misalnya saya menghapus tiga perintah terakhir), ketika saya mengetiknya historymasih menunjukkan perintah yang saya hapus dari ~/.bash_historyfile. Hanya ketika saya keluar dari sesi saya dan login lagi mereka menghilang.

Bagaimana ~/.bash_historyfile dan historyperintah saya disinkronkan?

sys0dm1n
sumber
2
itu dalam RAM ... Di mana sejarah bash disimpan?
Zanna
"Ketika saya mengetik perintah di terminal" Tidak benar. Ketika Anda menempatkan spasi di depan perintah secara default, itu tidak menyimpan perintah itu.
Rinzwind
@Rinzwind perilaku menyimpan perintah bahkan jika memiliki ruang di depan dapat diubah dengan mengedit nilai variabel lingkungan HISTCONTROL Anda.
sys0dm1n
@ sys0dm1n "secara default"
Rinzwind

Jawaban:

10

Ketika Anda membuka terminal bash, ia memuat konten ~/.bash_historydan membangun sejarah shell aktif (dalam RAM), menambahkan setiap perintah yang dieksekusi di shell itu ke dalamnya - dan hanya untuk itu, bukan ke file.

Hanya ketika Anda menutup terminal bash, riwayatnya ditambahkan ke ~/.bash_historyfile Anda .


Pilihan dari history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Opsi untuk ~/.bashrcfile

Jika Anda ingin mengubah perilaku ini sehingga riwayat sementara disimpan ~/.bash_historysecara langsung setelah menjalankan perintah, tambahkan baris ini:

PROMPT_COMMAND="history -a"

Jika Anda juga ingin setiap terminal memuat ~/.bash_historyfile secara otomatis setelah setiap eksekusi perintah, tambahkan baris ini sebagai gantinya:

PROMPT_COMMAND="history -a; history -c; history -r"

Jika Anda ingin mengecualikan perintah tertentu (mis. Semuanya dimulai dengan sudodan cat) agar tidak disimpan, tambahkan baris ini:

HISTIGNORE="sudo*:cat*"
pencuci mulut
sumber