मेरे लिए \ 033 विधि काम नहीं आई। \ R तरीका काम करता है, लेकिन यह वास्तव में कुछ भी नहीं मिटाता है, बस लाइन की शुरुआत में कर्सर डालता है। इसलिए यदि नया तार पुराने से छोटा है तो आप पंक्ति के अंत में बचे हुए पाठ को देख सकते हैं। अंत में tput सबसे अच्छा रास्ता तय करना था। यह कर्सर सामान के अलावा अन्य उपयोग करता है और यह कई लिनक्स और बीएसडी डिस्ट्रो में पहले से इंस्टॉल आता है इसलिए यह अधिकांश बैश उपयोगकर्ताओं के लिए उपलब्ध होना चाहिए।
#/bin/bash
tput sc # save cursor
printf "Something that I made up for this string"
sleep 1
tput rc;tput el # rc = restore cursor, el = erase to end of line
printf "Another message for testing"
sleep 1
tput rc;tput el
printf "Yet another one"
sleep 1
tput rc;tput el
यहाँ थोड़ी उलटी गिनती स्क्रिप्ट के साथ खेलने के लिए है:
#!/bin/bash
timeout () {
tput sc
time=$1; while [ $time -ge 0 ]; do
tput rc; tput el
printf "$2" $time
((time--))
sleep 1
done
tput rc; tput ed;
}
timeout 10 "Self-destructing in %s"
for i in {1..100000}; do echo -en "\r$i"; done
seq कॉल से बचने के लिए :-)