Menyimpan riwayat bash dari beberapa Konsole tidak berfungsi dengan benar


9

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_historyFile masih mengandung banyak duplikat terlepas dari ignoredups.

PS: Output gema $HISTSIZEdan $HISTFILESIZEkeduanya=1000


Pembaruan: Saya menemukan masalah pada entri di atas untuk .bashrc. Hanya menelepon history -adalam PROMPT_COMMANDhanya menambahkan perintah baru terakhir untuk .bash_history tersebut. Jadi ignoredupsdan erasedupstidak 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 -rdan 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_profiledengan 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.



Tidak. Saya ingin menghindari persyaratan kedua dalam daftar Oli. Saya tidak ingin sejarah terminal saya yang berbeda tercampur aduk. Sampai saya memulai terminal baru. Inilah yang secara alami terjadi ketika saya mematikan mesin dengan benar. Tapi kadang-kadang shutdown yang tepat tidak mungkin dan kecuali saya menyimpan sejarah secara instan, semua akan hilang dengan tiba-tiba mati.
indiajoe

Kedengarannya hampir sama dengan pertanyaan yang muncul di bug-bashmilis satu tahun setelah pertanyaan ini diposting: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.html
syntaxerror

Jawaban:


1

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.

tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp 
mv $HOME/.hist_Temp $HOME/.bash_history

Perintah di atas akan menjaga kemunculan terakhir perintah dan menghapus setiap pengulangan lainnya di atasnya dari file histori tanpa mengacaukan pesanan.


0

Itu jelek, dan saya yakin itu sedatau awkakan lebih baik, tetapi saya mencoba untuk memperbaiki masalah yang sama dengan menambahkan ini di .bashrc:

export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'`

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 grepmembuka banyak file untuk mencoba dan menemukan riwayat yang Anda cari, yang terkadang memakan waktu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.