ঝলকানি ঘটে কারণ স্ক্রিপ্ট পুরো স্ক্রিনটি সাফ করে। যদি এটি বিদ্যমান পাঠ্যের উপরে রঙ করে এবং কেবল প্রয়োজনীয় হিসাবে পরিষ্কার হয় তবে কোনও ঝাঁকুনি থাকবে না be
এখানে একটি উদাহরণ:
#!/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?