ก่อนอื่นคำถามของคุณไม่มีอะไรเกี่ยวข้องกับ bash แต่กับ terminal เทอร์มินัลกำลังตอบสนองต่อการแสดงข้อความของโปรแกรมและทุบตีตัวเองไม่สามารถควบคุมโปรแกรมได้เมื่อเปิดตัว
เทอร์มินัลนำเสนอลำดับการควบคุมเพื่อควบคุมสีแบบอักษรตำแหน่งเคอร์เซอร์และอื่น ๆ สำหรับรายการลำดับของเทอร์มินัลมาตรฐานดูที่
http://www.termsys.demon.co.uk/vtansi.htmคุณสามารถยกตัวอย่างได้
- วางเคอร์เซอร์ที่ตำแหน่งเริ่มต้นของบรรทัด
- ลบบรรทัดหลังจากนั้น
- เขียนบรรทัดใหม่
เพื่อสร้างแถบความคืบหน้า
โดยทั่วไปแล้วลำดับการหลบหนีของเทอร์มินัลขั้นสูงขึ้นอยู่กับเทอร์มินัลเช่นทำงานกับ Eterm หรือ xterm ncurses - เป็นไลบรารีโปรแกรมมิงเพื่อสร้างโปรแกรมแบบโต้ตอบกับเทอร์มินัลดังนั้นคุณไม่ต้องใช้ลำดับการหลีกเลี่ยง
วิธีเขียนทับบรรทัดที่มีอยู่ด้วยลำดับของเทอร์มินัล
echo long text
sleep 1
printf "\033[1A" # move cursor one line up
printf "\033[K" # delete till end of line
echo foo
วิธีเขียนทับบรรทัดที่มีอยู่โดยไม่มีลำดับของเทอร์มินัล
ทางออกที่ง่ายอย่างหนึ่งคือการไม่เขียนบรรทัดใหม่ในตอนท้าย แต่เขียน carriage return ซึ่งโดยทั่วไปจะรีเซ็ตเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดเช่น:
echo -n first
sleep 1
echo -ne "\rsecond"
echo
\r
หรือกลับรถจะวางเคอร์เซอร์ที่จุดเริ่มต้นของเส้นและช่วยให้คุณสามารถเขียนทับเนื้อหาของบรรทัด
สลับระหว่างบัฟเฟอร์เช่นless
หรือvi
พฤติกรรมของless
ยังเป็นเพราะคุณสมบัติขั้วขั้นสูงหน้าจอทางเลือก:
ในโหมด VT102 จะมี escape sequences เพื่อเปิดใช้งานและปิดใช้งานบัฟเฟอร์หน้าจอทางเลือกซึ่งมีขนาดเท่ากับพื้นที่แสดงผลของหน้าต่าง เมื่อเปิดใช้งานหน้าจอปัจจุบันจะถูกบันทึกและแทนที่ด้วยหน้าจอทางเลือก การบันทึกบรรทัดที่เลื่อนออกจากด้านบนของหน้าต่างถูกปิดใช้งานจนกว่าหน้าจอปกติจะได้รับการกู้คืน รายการ term‐ cap (5) สำหรับ xterm อนุญาตให้ visual editor vi (1) สลับไปที่หน้าจอทางเลือกสำหรับการแก้ไขและเรียกคืนหน้าจอเมื่อออก รายการเมนูป๊อปอัพทำให้ง่ายต่อการสลับไปมาระหว่างหน้าจอปกติและหน้าจออื่นสำหรับการตัดและวาง
http://rosettacode.org/wiki/Terminal_control/Preserve_screenจะแสดงตัวอย่างของวิธีการทำด้วยตัวคุณเองไม่ว่าจะผ่านทางtputหรือผ่านทาง escape sequences