Ngoài \r
hoặc \b
tiếp cận, có thể sử dụng \033[2K
ký tự điều khiển , thông báo cho thiết bị đầu cuối để xóa toàn bộ dòng. Ưu điểm của điều này so với \b
việc bạn không phải khớp số lượng \b
với số lượng ký tự bạn muốn xóa và so với \r
sẽ không có ký tự nào xuất hiện trên màn hình nếu dòng mới ngắn hơn dòng cũ một.
Dưới đây là ví dụ về cách áp dụng nó cho câu hỏi này và đây là một ví dụ về ứng dụng liên quan để tạo đầu ra tương tự như thông điệp khởi động. Trong ví dụ cụ thể này, bộ hẹn giờ sẽ biến mất sau khi đạt đến giây thứ 0 và dòng hẹn giờ sẽ được thay thế bằng "Sẵn sàng!" cụm từ.
#!/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!"
Một cách khác là sử dụng dialog
lệnh để tạo các hộp thoại đơn giản trong dòng lệnh. Hộp thoại sẽ duy trì trên màn hình trong suốt thời gian của bộ hẹn giờ và cập nhật theo vòng lặp và đến khi hoàn thành - bộ hẹn giờ sẽ được thay thế bằng thông báo "Sẵn sàng! Nhấn để thoát" một cách liền mạch:
#!/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
lệnh, mặc dù tôi không chắc chắn chính xác làm thế nào để làm điều đó.