एक टर्मिनल में एक टेक्स्ट फ़ाइल खोलें और जब भी इसे बदला जाए तो इसे ऑटो-रिफ्रेश करें


15

हर बार बदले जाने वाले त्वरित ऑटो रिफ्रेश वाले टर्मिनल में टेक्स्ट फाइल कैसे खोलते हैं?

मैंने vimसाथ देखा है :set autoread, लेकिन इसे vimताज़ा करने के लिए कुछ प्राथमिक इनपुट (जैसे कि अंदर कीपर ) की आवश्यकता होती है ।

मैं चाहता हूं कि ऑटो-रिफ्रेश हाथों से मुक्त हो। क्या ऐसा करने के लिए कुछ हैक है?

मैं क्रंचबैंग 11 का उपयोग कर रहा हूं, लेकिन मैं टर्मिनल के साथ काफी सहज हूं।


इसके लिए क्या अच्छा है? यह फाइल किस बारे में है? यदि यह एक लॉग है, तो इसमें आमतौर पर नीचे की ओर नई लाइनें जोड़ी जाती हैं, फिर आप इसका उपयोग कर सकते हैं tail -f $file
जिरीब

विशेष रूप से, मैं एक पायथन स्क्रिप्ट लिख रहा हूं, जो एक और टेक्स्ट फ़ाइल लिखती है, न कि नीचे की ओर नई लाइनें जोड़ें। मैं उस पाठ फ़ाइल की निगरानी करना चाहूंगा।
किट

inotify .......?
13

मैं परिचित नहीं हूं inotify। इसे देखते हुए, यह एक एपीआई है जिसे मुझे सी प्रोग्रामिंग के साथ एक्सेस करने की आवश्यकता है, जिसे मैं जल्द ही कभी भी करने के लिए इच्छुक नहीं हूं। मैं एक शेल कमांड समाधान की तलाश में हूं।
किट

1
एक उपकरण का एक सूट है जिसे आप कमांड लाइन से उपयोग कर सकते हैं, जिसे आमतौर पर कहा जाता है inotify-tools। ये कर्नेल में निर्मित एक सुविधा का उपयोग करते हैं जिसे Inotify कहा जाता है। किसी भी समय किसी ईवेंट पर किसी फ़ाइल पर कार्रवाई की जाती है, जिसे आप इनॉटिफाई के माध्यम से भेजा जाता है। कई ठे। भाषाएं। जैसे पायथन, पर्ल, इत्यादि में पुस्तकालय हैं जो इनोटिफ़ाइड एपीआई को लपेटते हैं। : विकिपीडिया स्नातकोत्तर देखें en.wikipedia.org/wiki/Inotify
SLM

जवाबों:


27

यह आपको प्रति सेकंड एक बार फाइल दिखाना चाहिए:

watch -n 1 cat file

1
यह वही है जिसकी मुझे तलाश है। धन्यवाद! मैंने इसे और आगे बढ़ायाwatch -tpcn 1 pygmentize -g filename
किट

@ के साथ सावधान watch -g, यह काम नहीं करेगा जैसा कि आप उम्मीद करेंगे
terdon

@terdon, -gस्विच वास्तव में है pygmentize। वैसे भी, चेतावनी के लिए धन्यवाद।
किट

यदि फ़ाइल सामग्री एक पृष्ठ से अधिक है, तो इसका उपयोग करके, आप फ़ाइल की शेष सामग्री की जांच करने के लिए स्क्रीन को स्क्रॉल नहीं कर सकते।
कोडिचन

1
सिर्फ क्यों नहीं watch -n 1 tail file?
वरुण

8
tail -f /var/log/syslog

जैसे ही वे फ़ाइल में जुड़ते हैं, तब syslog अपडेट दिखाता है।


यह लाइनें दिखाता है क्योंकि वे सही जोड़े गए हैं? ओपी को एक पूर्ण ताज़ा चाहिए।
सीन256

git-bash के साथ खिड़कियों पर भी काम करता है
डेविड 14

3

मैं watchअन्य उत्तर के रूप में उपयोग करूंगा, लेकिन आपको यह दिखाने के लिए कि यूनिक्स जैसे शेल द्वारा प्रदान किए गए बिल्डिंग ब्लॉक्स का उपयोग करके कोई जटिल रूप से जटिल समस्या का सामना कैसे कर सकता है; कुछ समय के लिए लूप आपके लूपिंग को करने का एक सरल तरीका हो सकता है।

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

उदाहरण

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

स्क्रीन साफ़ हो जाती है और फिर एक सेकंड के बाद, यह प्रदर्शित हो जाती है:

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

2

जैसा कि टिप्पणियों में सुझाया गया है, आप भी उपयोग कर सकते हैं inotifyहालांकि यह ओवरकिल है। अब तक का सबसे सरल उपयोग है watch। यहाँ यह करने के लिए एक तरीका है inotify:

  1. inotify-toolsपैकेज स्थापित करें

    sudo apt-get install inotify-tools
    
  2. inotifywatchपरिवर्तनों के लिए अपनी फ़ाइल की जांच करने के लिए उपयोग करें । इसे एक लूप और catफ़ाइल में चलाएं यदि कोई परिवर्तन पाया जाता है (इसीलिए मैं grepस्ट्रिंग के लिए total):

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

पासिंग -q(या --quiet) grepमिलान वाली रेखा को "कुल" के साथ मौन कर देगा।
FichteFoll

@FichteFoll अच्छा बिंदु (कृपया मेरी पिछली टिप्पणी की अवहेलना करें, यदि आपने इसे हटाने से पहले देखा, तो मैं धीमा हो रहा था)। धन्यवाद, संपादित
terdon

0

watch(1)वास्तव में उपयोगी उपकरण है। [1]

मैं catहालांकि उपयोग करने की सलाह नहीं दूंगा।

इसके बजाय, उपयोग करें headया इसके tailलिए आपको फ़ाइल की शुरुआत या अंत देखने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.