Saya menggunakan beberapa terminal Konsole. Dan saya ingin semua perintah yang saya ketik di setiap terminal disimpan dalam histori perintah, sehingga konsole berikutnya yang saya buka akan memiliki semuanya. Untuk mencegah agar setiap terminal tidak menulis histori perintah terminal lainnya, saya memberikan pengaturan berikut ini di.bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
Saya memberi baris terakhir untuk melihat nomor perintah di prompt saya. Perintah no. belum pernah melampaui 600, tetapi masih beberapa perintah lama saya hilang dari sejarah. Ada banyak perintah yang diberikan berulang kali, tetapi seperti yang diharapkan ignoredups
, itu tidak pernah meningkatkan perintah no in prompt. Namun perintah lama masih menghilang. Dan jumlah perintah dalam sejarah selalu tersisa sedikit lebih dari 500.
The .bash_history
File masih mengandung banyak duplikat terlepas dari ignoredups.
PS: Output gema $HISTSIZE
dan $HISTFILESIZE
keduanya=1000
Pembaruan: Saya menemukan masalah pada entri di atas untuk .bashrc
. Hanya menelepon history -a
dalam PROMPT_COMMAND
hanya menambahkan perintah baru terakhir untuk .bash_history tersebut. Jadi ignoredups
dan erasedups
tidak berpengaruh.
Apakah ada cara, saya masih bisa menulis ke .bash_history tanpa duplikat dari setiap terminal? Saya tidak ingin memuat seluruh histori pada setiap command prompt dengan history -r
dan menuliskannya kembali history -w
, karena perintah yang saya keluarkan di satu terminal juga akan muncul di terminal berjalan paralel lainnya. Saya ingin perintah gabungan hanya muncul di terminal baru.
Teka-teki, mengapa sejarah saya dipangkas menjadi 500 diselesaikan. Saya perhatikan itu terjadi setiap kali saya ssh ke mesin ini. Membuat .bash_profile
dengan entri berikut menyelesaikan masalah ini.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Sekarang .bashrc saya dieksekusi setiap kali saya ssh juga. Dan ukuran file sejarah sekarang meningkat secara monoton.
sumber
bug-bash
milis satu tahun setelah pertanyaan ini diposting: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.htmlJawaban:
Saya telah menyimpulkan bahwa tidak mungkin untuk menambahkan perintah baru secara langsung dan pada saat yang sama untuk menghapus duplikat. Jadi solusi saya adalah menjalankan perintah berikut ini sebentar. atau untuk meletakkannya di crontab saya.
Perintah di atas akan menjaga kemunculan terakhir perintah dan menghapus setiap pengulangan lainnya di atasnya dari file histori tanpa mengacaukan pesanan.
sumber
Itu jelek, dan saya yakin itu
sed
atauawk
akan lebih baik, tetapi saya mencoba untuk memperbaiki masalah yang sama dengan menambahkan ini di.bashrc
:Ini akan membuat file histori terpisah untuk setiap terminal yang Anda buka, namun jika Anda menjalankan bash dalam bash, ia akan menggunakan histori yang sama, tetapi tidak boleh ditimpa. Saya akan memperingatkan Anda dengan peringatan dari pengalaman saya. Meskipun ini berfungsi dan menjaga agar riwayat tidak ditimpa, Anda harus
grep
membuka banyak file untuk mencoba dan menemukan riwayat yang Anda cari, yang terkadang memakan waktu.sumber