Bir terminalde bir metin dosyası açın ve her değiştirildiğinde otomatik olarak yenileyin


15

Her değiştirildiğinde anında otomatik yenileme özelliğine sahip bir terminalde bir metin dosyasını nasıl açabilirim?

Ben baktım vimile :set autoreadancak (bir tuşa basma içi gibi bazı temel girdisi gerektirmektedir vimyenilemek için).

Otomatik yenilemenin eller serbest olmasını istiyorum. Bunu yapmak için bir kesmek var mı?

Crunchbang 11 kullanıyorum, ama terminalde oldukça rahatım.


Bu ne işe yarar? Bu dosya ne hakkında? Bir günlükse, genellikle altına yeni satırlar eklenir, o zaman kullanabilirsiniz tail -f $file.
jirib

Özellikle, sadece altına yeni satırlar eklemek değil, başka bir metin dosyası yazan bir Python komut dosyası yazıyorum. Bu metin dosyasını izlemek istiyorum.
Kit

Inotify .......?
jirib

Ben aşina değilim inotify. Ararken, yakında programlama yapmaya meyilli olmadığım C programlama ile erişmem gereken bir API. Bir kabuk komut çözümü arıyorum.
Kit

1
Tipik olarak, komut satırından kullanabileceğiniz bir araç takımı vardır inotify-tools. Bunlar, çekirdek içine yerleşik inotify adı verilen bir özellik kullanır. Bir olay üzerine bir dosya her hareket edildiğinde eylemde bulunabileceğiniz inotify yoluyla gönderilir. Birçok prog. langs. Python, Perl vb. Inotify API'sını saran kütüphanelere sahiptir. Wikipedia'ya bakın pg: en.wikipedia.org/wiki/Inotify
slm

Yanıtlar:


27

Bu, dosyayı saniyede bir göstermelidir:

watch -n 1 cat file

1
Aradığım şey bu. Teşekkürler! Daha da genişlettimwatch -tpcn 1 pygmentize -g filename
Kit

@Kit dikkatli olun watch -g, beklediğiniz gibi çalışmaz .
terdon

@terdon, -ganahtar aslında pygmentize. Her neyse, uyarı için teşekkürler.
Kit

Dosya içeriği bir sayfanın üzerindeyse, bunu kullanarak dosya içeriğinin geri kalanını kontrol etmek için ekranı kaydıramazsınız.
CodyChan

1
Neden sadece watch -n 1 tail file?
Varun

8
tail -f /var/log/syslog

Sistem günlüğü güncelleştirmelerini dosyaya eklendikçe gösterir.


Bu doğru eklendikçe satırları gösterir mi? OP'nin tamamen yenilenmesi gerekiyor.
Sean256

git-bash ile de windows üzerinde çalışır
David

3

watchDiğer cevabın önerdiği gibi kullanacağım ama sadece birisinin Unix gibi bir kabuk tarafından sağlanan yapı taşlarını kullanarak görünüşte karmaşık bir soruna nasıl yaklaşabileceğini göstermek için; while döngüsü, loop'unuzu gerçekleştirmenin basit bir yolu olabilir.

$ while [ 1 ]; do clear; date; cat <afile>; sleep 1 ;done

Misal

$ while [ 1 ]; do clear; date; cat sample.txt; sleep 1 ;done
Fri Nov 15 09:17:39 EST 2013
1
2
3
4
5

Ekran temizlenir ve bir saniye sonra bu görüntülenir:

Fri Nov 15 09:17:40 EST 2013
1
2
3
4
5

2

Yorumlarda önerildiği inotifygibi, aşırı olsa da kullanabilirsiniz . Şimdiye kadar en basit kullanmaktır watch. İşte bunu yapmanın bir yolu inotify:

  1. inotify-toolsPaketi yükleyin

    sudo apt-get install inotify-tools
    
  2. inotifywatchDosyanızda değişiklik olup olmadığını kontrol etmek için kullanın . catBir değişiklik algılanırsa bir döngüde ve dosyada çalıştırın (bu yüzden grepdize için ben total):

    while true; do 
      inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total && 
      echo "$(date;cat kk)"; 
    done
    

Eşleştiğinde -q(veya --quiet) grepgeçildiğinde eşleşen satır "total" ile susturulur.
FichteFoll

@FichteFoll iyi bir nokta (eğer silmeden önce gördüyseniz, önceki yorumumu dikkate almayın, yavaş oluyordum). Teşekkürler, düzenlendi.
terdon

0

watch(1)gerçekten kullanışlı bir araçtır. [1]

Ben catolsa kullanarak tavsiye etmem .

Bunun yerine, dosyanın başlangıcını veya sonunu görmeniz gerekip gerekmediğini headveya tailiçin kullanın .

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.