क्या `वॉच` का पेजिंग संस्करण है?


24

UNIX शेल के तहत, मैं watchकमांड को एक समान प्रभाव कैसे प्राप्त कर सकता हूं , लेकिन पेजिंग के साथ ताकि मैं आउटपुट में स्क्रॉल कर सकूं अगर यह एक से अधिक स्क्रीन लेता है?

दूसरे शब्दों में, मुझे एक कार्यक्रम चाहिए जो watchकि lessहोना है cat

एक उदाहरण के रूप में, मैं कहता हूं कि मैं इसका उत्पादन देखना चाहता था qstat, मैं इसका उपयोग कर सकता था

watch qstat

qstat का आउटपुट देखने के लिए, लेकिन यह केवल पहला स्क्रीनफुल दिखाता है।

के पेजिंग संस्करण के साथ watch, मैं आउटपुट में चारों ओर घूमने में सक्षम हो जाऊंगा क्योंकि यह अभी भी लगातार अपडेट हो रहा है watch। क्या मौजूदा उपयोगिताओं के साथ इस समय ऐसा करने का कोई तरीका है?


यह शायद सुपरयूजर या शायद सर्वरफॉल्ट पर आधारित है।

आप शायद सही हैं, मैं इसे कैसे आगे बढ़ा सकता हूं?
डेविड डीन

अब तक इसे स्थानांतरित करने के लिए तीन लोगों ने मतदान किया है; यदि दो और लोग (या मॉडरेटर) इसे स्थानांतरित करने के लिए वोट देते हैं, तो यह स्वचालित रूप से होगा।
ग्रेग हेविगिल

क्यों न केवल एक बड़ी खिड़की खोलें और पूरी तरह से पेजिंग के साथ चले जाएं?
Marcin

1
क्योंकि मेरी स्क्रीन पहले से ही भरी हुई है? क्यों का उपयोग करें lessजब आप बस का उपयोग कर सकते हैं catऔर एक बड़ी खिड़की?
डेविड डीन

जवाबों:


18

'वॉच' कमांड को संशोधित करने के बजाय, स्क्रीन का उपयोग करें!

उदाहरण के लिए, मान लीजिए कि आपको ऊँचाई की 300 रेखाएँ और चौड़ाई के 100 वर्ण और उसके चारों ओर घूमने में सक्षम होने की आवश्यकता है। स्क्रीन शुरू करने के बाद, आकार को इस प्रकार बल दें:

C-a :height -w 300
C-a :width -w 100

अब अपनी वॉच कमांड शुरू करें। फिर आप C-a <ESC>डिस्प्ले के चारों ओर पेज का उपयोग कर सकते हैं।

दुर्भाग्य से, कॉपी मोड में डिस्प्ले रीफ्रेश नहीं होता है। लेकिन अगर आप विंडो के किस सेक्शन को देखना चाहते हैं, उसे एडजस्ट करना चाहते हैं, तो सबसे आसान तरीका हो सकता है कि आप अपने टर्मिनल को वर्चुअल विंडो के निचले-दाईं हिस्से को डिफ़ॉल्ट रूप से ऊँचाई / चौड़ाई के कमांड से फिर से चलाएँ।


एकमात्र मुद्दा तो यह है कि प्रत्येक गो के बीच स्क्रीन को खाली करते हुए लगातार कमांड को कैसे दोहराया जाए
डेविड डीन

उफ़, मेरा मतलब था स्क्रीन के अंदर वॉच कमांड चलाना। फिक्स्ड।
मिकीबी

yartls - स्क्रीन से प्यार करने का एक और कारण :)
वॉरेन

ध्यान दें कि C-उर्फ हैctrl-
हेनरी

5

आप यह कोशिश कर सकते हैं:

vmstat; सो जाओ 1; हो गया | कम से

Vmstat को qstat से बदलें और नींद को अपनी आवश्यकताओं के अनुसार समायोजित करें


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

हां, लेकिन आप वापस स्क्रॉल कर सकते हैं। आप दोनों एक साथ नहीं हो सकते। शिफ्ट एफ को दबाने पर वह कैपिटल 'एफ' टेल की तरह काम करेगा।
Spacen Jasset


2

ठीक है, मैं एक watchlessसमारोह में थोड़ा गया था । यह थोड़ा मोटा है, और यह अभी तक पूरी तरह से काम करने के लिए प्रकट नहीं होता है, लेकिन यहाँ जाता है:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

आपको Rअपडेट को प्रदर्शित करने के लिए कम से कम कुंजी का उपयोग मैन्युअल रूप से करना होगा।

यह के लिए काम करने के लिए प्रकट होता है watchless date, लेकिन के लिए नहीं watchless qstatया watchless pstree, जो दोनों शो खाली। कोई विचार?


आप एक दूसरी फ़ाइल का उपयोग आदेश के अगले रन के उत्पादन में और फिर लिखने के लिए चाहिए mvद्वारा फाइल पढ़ने में यह दूसरी फ़ाइल lessके रूप में mvपरमाणु है। अन्यथा lessसोच सकते हैं कि फ़ाइल गायब हो गई है यदि उसी समय एक रिफ्रेश का अनुरोध किया जाता है जैसा कि फ़ाइल के साथ लिखा जा रहा है "$@" > $out। लूप शुरू करने से पहले आपको एक बार आउटपुट फाइल पर भी लिखना चाहिए।
औरेलीन ओम्स

0

मैं यह नहीं देखता कि इसे पंक्ति सामग्री के रूप में कैसे लागू किया जा सकता है, और watchयदि आप नीचे स्क्रॉल कर सकते हैं, तो यह प्रत्येक 2 सेकंड में पहली पंक्ति में वापस रीसेट हो जाएगा।

कुछ वर्कअराउंड हैं:

watch 'qstat | tail -n40' नीचे से 40 वीं पंक्ति से शुरुआत किस्त का उत्पादन दिखाने के लिए

watch 'qstat | grep jsmith' आउटपुट को grep करने के लिए ताकि जिन लाइनों में आप रुचि रखते हैं वे हमेशा पहली स्क्रीन में हों।

ध्यान दें कि आपको पाइप के चारों ओर कमांड्स को सिंगल कोट्स में डालने की आवश्यकता है - अन्यथा आप आउटपुट आउटपुट करेंगे watch, न कि आउटपुट qstat


0

Enkrs के उत्तर को जारी रखने के लिए,

घड़ी 'qstat | सिर -300 | पूंछ -15 '

आपको qstat के आउटपुट में मनमाने पेज मिलेंगे।


0

यहाँ एक नहीं बल्कि क्रिप्ट स्क्रिप्ट है जो कई कमांड के लिए काम करता है जो मैंने इसे फेंक दिया

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

इस तरह से इस्तेमाल किया:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

बल्कि पांडित्यपूर्ण होने के नाते, रिफ्रेश के बीच संक्रमण उतना आसान नहीं है जितना कि मैं चाहूंगा। स्वाभाविक रूप से, एक सरल लिपि होने के नाते यह डिफरेंट हाइलाइट (वॉच-डी) का समर्थन नहीं करता है। साथ ही, इनपुट तर्कों के पार्सिंग को बेहतर तरीके से किया जा सकता है।



0

मैं इस अनुरोध को पूरा करने के लिए एक सरल अजगर स्क्रिप्ट लागू करता हूं, जिसका नाम "वाटचेल" है

इसे प्राप्त करें: पाइप स्थापित वॉटरचेल

वॉचच के साथ घड़ी बदलें और स्क्रॉल करने योग्य स्क्रीन का आनंद लें अब यह केवल -n और -d झंडे का समर्थन करता है।


-1

तुम कोशिश कर सकते हो:

watch command > file

तब आपकी फ़ाइल में आपको परिशिष्ट आउटपुट देखना चाहिए (मेरे पास यह परीक्षण करने के लिए अब एक लिनक्स बॉक्स रिग नहीं है)


1
यह वह नहीं है जो आप करना चाहते हैं, वास्तव में, यह बस fileएक ही आउटपुट को बार-बार भर देगा। यह निश्चित रूप से मूल प्रश्न को संबोधित नहीं करता है।
ग्रेग हेवगिल

तब मुझे पता नहीं है :)

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