Mở tệp văn bản trong một thiết bị đầu cuối và tự động làm mới nó bất cứ khi nào nó được thay đổi


15

Làm cách nào để mở tệp văn bản trong thiết bị đầu cuối với tính năng tự động làm mới tức thì mỗi khi thay đổi?

Tôi đã nhìn vào vimvới :set autoread, nhưng nó đòi hỏi một số đầu vào cơ bản (chẳng hạn như một bên bấm phím vim) để kích hoạt làm mới.

Tôi muốn tự động làm mới được rảnh tay. Có một số hack để làm điều này?

Tôi đang sử dụng Crunchbang 11, nhưng tôi khá thoải mái với thiết bị đầu cuối.


Điều đó tốt cho cái gì? Tập tin này là về cái gì? Nếu nó là một bản ghi, nó thường có các dòng mới được thêm vào dưới cùng, sau đó bạn chỉ có thể sử dụng tail -f $file.
jirib

Cụ thể, tôi đang viết một tập lệnh Python viết ra một tệp văn bản khác, không chỉ thêm các dòng mới ở phía dưới. Tôi muốn theo dõi tập tin văn bản đó.
Bộ

kích thích .......?
jirib

Tôi không quen thuộc inotify. Nhìn lên, đó là một API mà tôi cần truy cập bằng lập trình C, mà tôi không có xu hướng thực hiện sớm. Tôi đang tìm kiếm một giải pháp lệnh shell.
Bộ

1
Thông thường, có một bộ công cụ bạn có thể sử dụng từ dòng lệnh được gọi là inotify-tools. Chúng sử dụng một tính năng được tích hợp trong Kernel gọi là inotify. Bất cứ khi nào một tập tin được thực hiện khi một sự kiện được gửi qua inotify mà bạn có thể hành động. Nhiều prog. langs. chẳng hạn như Python, Perl, v.v. có các thư viện bao bọc API Inotify. Xem trang Wikipedia pg: en.wikipedia.org/wiki/Inotify
slm

Câu trả lời:


25

Điều này sẽ cho bạn thấy các tập tin một lần mỗi giây:

watch -n 1 cat file

1
Đây là những gì tôi đang tìm kiếm. Cảm ơn! Tôi đã mở rộng hơn nữa vớiwatch -tpcn 1 pygmentize -g filename
Kit

@ Hãy cẩn thận với watch -g, nó không hoạt động như bạn mong đợi .
terdon

@terdon, việc -gchuyển đổi thực sự là cho pygmentize. Dù sao, cảm ơn đã cảnh báo.
Bộ

Nếu nội dung tệp trên một trang, sử dụng phần này, bạn không thể cuộn màn hình để kiểm tra phần còn lại của nội dung tệp.
CodyChan

1
Tại sao không chỉ watch -n 1 tail file?
Varun

7
tail -f /var/log/syslog

Hiển thị các cập nhật nhật ký hệ thống khi chúng được thêm vào tệp.


Điều này cho thấy các dòng như họ được thêm chính xác? OP cần làm mới hoàn toàn.
Sean256

cũng hoạt động trên windows với git-bash
David

3

Tôi sẽ sử dụng watchnhư câu trả lời khác gợi ý nhưng chỉ để cho bạn thấy cách người ta có thể tiếp cận một vấn đề có vẻ phức tạp bằng cách sử dụng các khối xây dựng được cung cấp bởi một trình bao như Unix; một vòng lặp while có thể là một cách đơn giản để thực hiện vòng lặp của bạn.

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

Thí dụ

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

Màn hình xóa và sau một giây, điều này sẽ được hiển thị:

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

2

Theo đề xuất trong các bình luận, bạn cũng có thể sử dụng inotifymặc dù nó quá mức cần thiết. Cho đến nay, đơn giản nhất là sử dụng watch. Đây là một cách để làm điều đó với inotify:

  1. Cài đặt inotify-toolsgói

    sudo apt-get install inotify-tools
    
  2. Sử dụng inotifywatchđể kiểm tra tập tin của bạn để thay đổi. Chạy nó trong một vòng lặp và cattệp nếu phát hiện thay đổi (đó là lý do tại sao tôi grepcho chuỗi total):

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

Vượt qua -q(hoặc --quiet) để greplàm im lặng dòng phù hợp với "tổng".
FichteFoll

@FichteFoll điểm tốt (xin vui lòng bỏ qua nhận xét trước đây của tôi nếu bạn thấy nó trước khi tôi xóa, tôi đã bị chậm). Cảm ơn, chỉnh sửa.
terdon

0

watch(1)là một công cụ thực sự hữu ích. [1]

Tôi không khuyên bạn nên sử dụng catmặc dù.

Thay vào đó, sử dụng headhoặc tailcho dù bạn cần xem phần đầu hoặc phần cuối của tệp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.