Sejarah hancur

15

Dalam mode gui, ketika pengguna memiliki lebih dari satu terminal terbuka, bagaimana terminal menulis ulang file sejarah pengguna itu? alasan saya bertanya adalah karena, sangat mungkin bahwa di setiap terminal pengguna akhirnya menjalankan perintah yang berbeda. Jadi, apakah file histori pada akhirnya menyimpan perintah dari semua terminal atau hanya dari yang pertama dibuka? Atau adakah skema lain yang digunakan untuk mengatasi situasi ini?

Jay
sumber

Jawaban:

11

Itu sepenuhnya tergantung pada bagaimana shell memilih untuk menanganinya

bashsecara default akan menimpa file histori dengan histori lokal setiap shell saat keluar, sehingga shell terakhir yang keluar menang. The histappendpilihan akan menyebabkan itu untuk menambahkan ke sejarah induk bukan ( shopt -s histappend).

zsh melakukan hal yang sama secara default, dan memiliki beberapa opsi untuk menghadapinya:

  • appendhistory - Sejarah setiap shell ditambahkan ke file riwayat master saat shell keluar
  • incappendhistory - File riwayat master diperbarui setiap kali baris dieksekusi di shell apa pun, alih-alih menunggu sampai shell itu keluar
  • sharehistory- Seperti incappendhistory, tetapi juga menarik perubahan dari file riwayat master ke semua shell yang berjalan, sehingga Anda dapat menjalankan perintah dalam satu shell dan kemudian menekan Upshell lain dan melihatnya
Michael Mrozek
sumber
Sekarang, beri tahu saya cara melakukannya di Bash;)
tante
1
@tante Tidak shopt -s histappendberhasil?
Michael Mrozek
0

Saya awalnya mendapat ide ini dari buku O'Reilly "Unix Power Tools".

Di .profileset I saya :

export HISTFILE=$HOME/.sh_hist.$$

Setiap kali saya .profilemembaca, saya mendapatkan file riwayat baru yang diberi nama dengan PID dari sesi saya. Jika saya memiliki beberapa login, setiap login mendapatkan file histori unik. Bekerja di kshdan bash.

Jika Anda hanya membuka terminal baru dalam sesi X, biasanya itu bukan shell login, tetapi Anda bisa mengkonfigurasinya untuk bertindak sebagai shell login. Misalnya, rxvt +lsakan mulai rxvtsebagai shell login. Periksa dokumen untuk terminal apa pun yang Anda gunakan.

Selain itu, kecuali Anda menggunakan file .logoutatau .bash_logoutfile (atau cara lain) untuk membersihkan, Anda akhirnya akan memiliki banyak .sh_histfile.

mazianni
sumber
0

tcsh: set savehist = (5000 merge)gabungan

pengguna39122
sumber