चमकती होती है क्योंकि स्क्रिप्ट पूरी स्क्रीन को साफ करती है। यदि यह मौजूदा पाठ पर पेंट करता है और केवल आवश्यकतानुसार ही साफ करता है, तो कोई चंचलता नहीं होगी।
यहाँ एक उदाहरण है:
#!/bin/sh
watchit() {
HOME=$(tput cup 0 0)
ED=$(tput ed)
EL=$(tput el)
ROWS=$(tput lines)
COLS=$(tput cols)
printf '%s%s' "$HOME" "$ED"
while true
do
CMD="$@"
${SHELL:=sh} -c "$CMD" | head -n $ROWS | while IFS= read LINE; do
printf '%-*.*s%s\n' $COLS $COLS "$LINE" "$EL"
done
printf '%s%s' "$ED" "$HOME"
sleep 1
done
}
watchit top -b -n 1
यह ऐसा करता है:
- दिए गए कमांड से आउटपुट प्रिंट करता है जो स्क्रीन पर फिट होगा (कोई रैपिंग या स्क्रॉलिंग नहीं)
- मौजूदा लाइनों पर लिखते हैं, प्रत्येक पंक्ति के हिस्से को साफ़ करते हैं जो ओवरराइट नहीं किया जाता है
edवर्तमान स्थान से स्क्रीन के अंत तक प्रिंट करने के लिए आपके टर्मिनल की क्षमता का उपयोग करता है ।
यदि आप एक आकार बदलने योग्य स्क्रीन को संभालना चाहते हैं, तो आप बाहरी लूप के अंदर ROWSऔर COLSअंदर असाइनमेंट को स्थानांतरित कर सकते हैं , जैसे,
#!/bin/sh
watchit() {
HOME=$(tput cup 0 0)
ED=$(tput ed)
EL=$(tput el)
printf '%s%s' "$HOME" "$ED"
while true
do
ROWS=$(tput lines)
COLS=$(tput cols)
CMD="$@"
${SHELL:=sh} -c "$CMD" | head -n $ROWS | while IFS= read LINE; do
printf '%-*.*s%s\n' $COLS $COLS "$LINE" "$EL"
done
printf '%s%s' "$ED" "$HOME"
sleep 1
done
}
watchit top -b -n 1
क्योंकि tputसिस्टम से वर्तमान स्क्रीन के लिए पूछता है।
आगे की पढाई:
clear | hexdump -C?