นอกจาก\r
หรือ\b
วิธีการแล้วยังมีความเป็นไปได้ที่จะใช้\033[2K
ตัวควบคุมซึ่งบอกให้เทอร์มินัลทำการล้างทั้งบรรทัด ข้อดีของการเปรียบเทียบนี้\b
คือคุณไม่จำเป็นต้องจับคู่\b
กับจำนวนอักขระที่คุณต้องการลบและเมื่อเปรียบเทียบกับ\r
จะไม่มีอักขระโผล่ออกมาบนหน้าจอหากบรรทัดใหม่สั้นกว่าเก่า หนึ่ง.
ด้านล่างนี้เป็นตัวอย่างของวิธีการใช้กับคำถามนี้และนี่คือตัวอย่างของแอปพลิเคชันที่เกี่ยวข้องเพื่อสร้างผลลัพธ์ที่คล้ายกับข้อความบูต ในตัวอย่างนี้ตัวจับเวลาจะหายไปเมื่อถึงวินาทีที่ 0 และเส้นจับเวลาจะถูกแทนที่ด้วย "Ready!" วลี.
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
printf "One moment please: %d" "$sek"
sleep 1
printf "\r%b" "\033[2K"
done
echo "Ready!"
อีกทางเลือกหนึ่งคือใช้dialog
คำสั่งสำหรับสร้างไดอะล็อกอย่างง่ายใน command-line กล่องโต้ตอบจะยังคงอยู่บนหน้าจอในช่วงระยะเวลาของตัวจับเวลาและอัปเดตด้วยลูปและตามเวลาที่ทำ - ตัวจับเวลาจะถูกแทนที่ด้วยข้อความ "พร้อม! กดเพื่อออก" ในลักษณะที่ราบรื่น:
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
echo "$sek" | dialog --progressbox "Please wait" 10 25
sleep 1
done
dialog --msgbox "Ready! Press <OK> to finish" 10 25
watch
คำสั่งถึงแม้ว่าฉันไม่แน่ใจว่าจะทำอย่างไร