Geçmişimi birçok ekran penceresinde kolayca arayabilir miyim?


11

Geçerli screenoturumumda 12 açık pencere var. Haftalardır çalışıyor ... Geçen hafta bu 12 ekran penceresinden birinde bir ImageMagick convertkomutu yürüttüğümü biliyorum ... 12 örneğin tüm Bash geçmişini kapatmadan veya çalıştırmadan kolayca arayabileceğim bir yol var mı 12 ekranda mı?history | grep convert


1
Ben zsh kullanmak ve ben setopt share_historyde /etc/zsh/zshrcbana hiçbir zaman olmamalıdır bu soruna böylece: P
phunehehe

Yanıtlar:


18

history -a; history -cGeçmişi kaydetmek için tüm pencerelerde çalıştırabilirsiniz . Ve sonra history -ronu yenilemek için.

Bunu daha kalıcı olarak çözmek için şunu ekleyin .bashrc:

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

2
Harika, teşekkürler! Tek sorun, bir kabuğa bir şey yazar ve sonra başka bir şeye gider ve hemen geçmişi yazarsanız, geçmişte görünmez. Bunun nedeni PROMPT_COMMAND'ın henüz yürütülmediği için yenileme gerçekleşmedi. Önce ikinci pencerede return tuşuna basmanız (ya da başka bir komut çalıştırmanız), ardından history yazmanız gerekir.
Javid Jamae

1

Kulağa zor geliyor. İşte size uygun olabilecek birkaç yöntem.

Yüklü işlem muhasebe araçlarınız varsa (Linux'ta, adlı bir paket arayın acct) ve bunları kullanma izniniz varsa, hangi terminalde ne zaman ve muhtemelen çalıştırdığınızı öğrenebilirsiniz convert:

lastcomm convert

Bu kullanılamıyorsa veya sonuçsuzsa, komutları historyaramak için her bash örneğinde bir komut yürütebilirsiniz convert. Bu, bash başlatıldığında geçmiş dosyasında bulunan komutları bulur.

: >/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)ekran pencerelerinizin sayılarını yineler. Şu anda bash çalıştırmayan, ancak girdiyi farklı yorumlayacak başka bir işlemi atladığınızdan emin olun.
  • screen -p $w stuff …Aşağıdaki dizeyi belirtilen pencereye girdi olarak gönderir. Dizenin sonunda yeni satıra ihtiyacınız vardır.
  • 3. pencerede koştuysanız dosya /tmp/convert.historygibi satırların bir listesini içerecektir .3 convert foo.jpgconvert foo.jpg

1
Ne yazık ki bunlar işe yaramadı. :-( Az history | grep convertönce tüm pencerelerde koştum, hayal kırıklığına uğradım, Gilles'in başka bir harika cevabını kabul etmek istedim!
Josh

1

tcsh, periyodik takma ad kullanarak oturumlar arasında geçmişi paylaşmanıza olanak tanır.

.Cshrc (veya .tcshrc) dosyanızda:

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

Bu işlem geçmiş komutunu her 60 dakikada bir otomatik olarak yürütür. Bu, geçmişi ana dizininizdeki ortak bir geçmiş dosyasına kaydeder. Geçmişi daha sık güncellemek için, tperiod numarasını düşürün veya manuel olarak yenilemek için "periyodik" komutunu uygulayın


0

Bash, sadece çıkarken tarihi yazar, bu da bu sorunu en iyi şekilde yapar. Zsh'ın aktif oturumlar arasında geçmişi paylaşabileceğini duydum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.