Dapatkah saya dengan mudah mencari riwayat saya di banyak jendela layar?

11

screenSesi saya saat ini memiliki 12 jendela terbuka. Sudah berjalan selama berminggu-minggu ... Saya tahu saya menjalankan convertperintah ImageMagick di salah satu dari 12 jendela layar ini minggu lalu ... apakah ada cara saya dapat dengan mudah mencari melalui sejarah Bash dari semua 12 contoh, tanpa menutupnya atau menjalankan history | grep convertdi semua 12 layar?

Josh
sumber
1
Saya menggunakan Zsh dan saya harus setopt share_historydi /etc/zsh/zshrcsehingga masalah ini seharusnya tidak pernah terjadi kepada saya: P
phunehehe

Jawaban:

18

Anda dapat menjalankan history -a; history -csemua jendela untuk menyimpan histori. Dan history -runtuk menyegarkannya.

Untuk menyelesaikannya, tambahkan ini secara permanen ke .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Gert
sumber
2
Ini bagus, terima kasih! Satu-satunya masalah adalah bahwa jika Anda mengetik sesuatu di satu shell dan kemudian pergi ke yang lain dan ketik histori segera, itu tidak akan muncul dalam sejarah. Ini karena PROMPT_COMMAND belum dijalankan, jadi penyegaran belum terjadi. Anda harus menekan return di jendela kedua (atau menjalankan perintah lain) terlebih dahulu, lalu ketikkan histori.
Javid Jamae
1

Kedengarannya sulit. Berikut adalah beberapa metode yang mungkin cocok untuk Anda.

Jika Anda memiliki alat akuntansi proses yang diinstal (di Linux, cari paket yang disebut acct) dan izin untuk menggunakannya, Anda bisa mencari tahu kapan dan mungkin pada terminal apa Anda berlari convert:

lastcomm convert

Jika ini tidak tersedia atau tidak eksklusif, Anda dapat menjalankan historyperintah di setiap instance bash untuk mencari convertperintah. Ini akan menemukan perintah yang ada di file histori ketika bash juga dimulai.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)mengulangi jumlah jendela layar Anda. Pastikan untuk melewati windows yang saat ini tidak menjalankan bash tetapi beberapa proses lain yang akan menafsirkan input berbeda.
  • screen -p $w stuff …mengirimkan string berikut sebagai input ke jendela yang ditentukan. Anda memerlukan baris baru di akhir string.
  • File /tmp/convert.historyakan berisi daftar baris seperti 3 convert foo.jpg, jika Anda berlari convert foo.jpgdi jendela 3.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Sayangnya ini tidak berhasil. :-( Saya baru saja berlari history | grep convertdi semua jendela. Saya kecewa, saya ingin menerima jawaban hebat lain dari Gilles!
Josh
1

tcsh memungkinkan Anda untuk berbagi riwayat antar sesi melalui penggunaan alias berkala.

Dalam file .cshrc (atau .tcshrc) Anda:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Ini akan secara otomatis menjalankan perintah histori setiap 60 menit. Ini akan menyimpan riwayat ke file riwayat umum di direktori rumah Anda. Untuk memperbarui riwayat lebih sering, turunkan nomor periode, atau cukup jalankan perintah "periodik" untuk menyegarkan secara manual

Michael Toth
sumber
0

Bash hanya menulis sejarah saat itu keluar, yang membuat ini paling bermasalah. Saya pernah mendengar bahwa zsh dapat berbagi riwayat antara sesi aktif.

bahamat
sumber