Buka file teks di terminal dan segarkan secara otomatis setiap kali diubah


15

Bagaimana cara membuka file teks di terminal dengan penyegaran otomatis instan setiap kali diubah?

Saya telah melihat vimdengan :set autoread, tetapi membutuhkan beberapa masukan dasar (seperti dalam tekanan tombol vim) untuk memicu refresh.

Saya ingin penyegaran otomatis bebas tangan. Apakah ada peretasan untuk melakukan ini?

Saya menggunakan Crunchbang 11, tapi saya cukup nyaman dengan terminal.


Apa gunanya itu? Tentang apa file ini? Jika ini adalah log, biasanya ada baris baru yang ditambahkan di bagian bawah, maka Anda bisa menggunakannya tail -f $file.
jirib

Secara khusus, saya menulis skrip Python yang menulis file teks lain, tidak hanya menambahkan baris baru di bagian bawah. Saya ingin memonitor file teks itu.
Kit

batalkan .......?
jirib

Saya tidak kenal inotify. Mencari itu, itu adalah API yang perlu saya akses dengan pemrograman C, yang saya tidak cenderung lakukan dalam waktu dekat. Saya mencari solusi perintah shell.
Kit

1
Ada seperangkat alat yang dapat Anda gunakan dari baris perintah yang disebut, biasanya inotify-tools,. Ini menggunakan fitur yang dibangun ke dalam Kernel yang disebut inotify. Setiap kali suatu file ditindaklanjuti atas suatu peristiwa dikirim melalui inotify bahwa Anda dapat bertindak. Banyak prog. langs. seperti Python, Perl, dll. memiliki pustaka yang membungkus Inotify API. Lihat Wikipedia pg: en.wikipedia.org/wiki/Inotify
slm

Jawaban:


26

Ini akan menunjukkan kepada Anda file sekali per detik:

watch -n 1 cat file

1
Ini yang saya cari. Terima kasih! Saya memperpanjang lebih jauh denganwatch -tpcn 1 pygmentize -g filename
Kit

@ Berhati-hatilah watch -g, itu tidak bekerja seperti yang Anda harapkan .
terdon

@terdon, -gsaklar ini sebenarnya untuk pygmentize. Bagaimanapun, terima kasih atas peringatannya.
Kit

Jika konten file lebih dari satu halaman, menggunakan ini, Anda tidak dapat menggulir layar untuk memeriksa sisa konten file.
CodyChan

1
Kenapa tidak adil watch -n 1 tail file?
Varun

8
tail -f /var/log/syslog

Memperlihatkan pembaruan syslog saat ditambahkan ke file.


Ini menunjukkan baris ketika mereka ditambahkan dengan benar? OP membutuhkan penyegaran penuh.
Sean256

bekerja pada windows dengan git-bash juga
David

3

Saya akan menggunakan watchsebagai jawaban lain menyarankan tetapi hanya untuk menunjukkan kepada Anda bagaimana seseorang dapat mendekati masalah yang tampaknya rumit menggunakan blok bangunan yang disediakan oleh shell seperti Unix; a while loop bisa menjadi cara sederhana untuk melakukan looping Anda.

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

Contoh

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

Layar bersih dan kemudian setelah satu detik, ini akan ditampilkan:

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

2

Seperti yang disarankan dalam komentar, Anda juga bisa menggunakannya inotifymeskipun berlebihan. Sejauh ini yang paling sederhana adalah menggunakan watch. Inilah satu cara untuk melakukannya inotify:

  1. Instal inotify-toolspaket

    sudo apt-get install inotify-tools
    
  2. Gunakan inotifywatchuntuk memeriksa file Anda untuk perubahan. Jalankan dalam satu lingkaran dan catfile jika perubahan terdeteksi (itu sebabnya saya grepuntuk string total):

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

Melewati -q(atau --quiet) untuk grepmembungkam garis yang cocok dengan "total".
FichteFoll

@FichteFoll poin bagus (harap abaikan komentar saya sebelumnya jika Anda melihatnya sebelum saya dihapus, saya lambat). Terima kasih sudah diedit.
terdon

0

watch(1)adalah alat yang sangat berguna. [1]

Saya tidak akan merekomendasikan penggunaannya cat.

Sebagai gantinya, gunakan headatau tailuntuk apakah Anda perlu melihat awal atau akhir file.

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.