Yanıp sönen komut dosyası tüm ekranı temizlediğinden oluşur. Mevcut metni boyar ve yalnızca gerektiği gibi temizlenirse, titreme olmaz.
İşte bir örnek:
#!/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
Bunu yapar:
- çıktıyı ekrana sığacak şekilde verilen komuttan yazdırır (sarma veya kaydırma yok)
- mevcut satırların üzerine yazar, her satırın üzerine yazılmayan kısmını temizler
edterminalinizin geçerli konumdan ekranın sonuna kadar yazdırma yeteneğini kullanır .
Yeniden boyutlandırılabilir bir ekranı işlemek istiyorsanız, atamaları dış döngünün içine ROWSve COLSiçine taşıyabilirsiniz , ör.
#!/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
çünkü tputmevcut ekran boyutunu sistemden ister.
Daha fazla okuma:
clear | hexdump -C?