มีวิธีล้างเทอร์มินัล แต่แทนที่จะปล่อยพรอมต์ที่ด้านบนของหน้าจอทิ้งไว้ตรงกลางหรือไม่ ดูเหมือนว่าclear
โดยทั่วไปจะไม่สนใจพารามิเตอร์บรรทัดคำสั่งทั้งหมด
ฉันคิดว่าจะมีวิธีในการทำเช่นนี้tput
แต่ไม่สามารถหาได้
มีวิธีล้างเทอร์มินัล แต่แทนที่จะปล่อยพรอมต์ที่ด้านบนของหน้าจอทิ้งไว้ตรงกลางหรือไม่ ดูเหมือนว่าclear
โดยทั่วไปจะไม่สนใจพารามิเตอร์บรรทัดคำสั่งทั้งหมด
ฉันคิดว่าจะมีวิธีในการทำเช่นนี้tput
แต่ไม่สามารถหาได้
คำตอบ:
คุณสามารถใช้tput
เพื่อเลื่อนเคอร์เซอร์ไปยังบรรทัดที่กำหนดในหน้าจอเช่น
tput cup 11 0
เพื่อย้ายไปยังบรรทัดที่สิบสอง (ค่านับจากศูนย์)
ในบรรทัดเดียวกันคุณสามารถใช้tput
เพื่อล้างจากตำแหน่งนั้นจนถึงจุดสิ้นสุดของหน้าจอโดยใช้ed
ความสามารถ รวม,
tput cup 11 0 && tput ed
อาจเป็นสิ่งที่ต้องการ
หากคุณต้องการไปที่เครื่องหมายครึ่งทางบนหน้าจอหมายเลขแรกที่ส่งคืนโดย
stty size
คือ (ในระบบส่วนใหญ่) จำนวนแถวของหน้าจอ การเพิ่มไปยังคำสั่ง:
tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed
clear
แตกต่างโปรแกรมจากtput ed
:
Caveat: บนบางแพลตฟอร์มtput ed
อาจไม่ทำงานเนื่องจากปัญหาได้รับการแก้ไขนานมาแล้ว ในกรณีดังกล่าวการอัพเกรดการกำหนดค่า curses / ncurses ของคุณจะแก้ไขปัญหาได้
หากการนับบรรทัดเป็นเลขคี่ให้tput cup
ลบทั้งหน้า
การเขียนแบบนี้ควรแก้ไขว่า:
tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed
หากคุณสนใจที่จะล้างครึ่งล่างของหน้าจอในขณะที่ยังคงพักอยู่ส่วนนี้จะใช้งานได้:
half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed
แก้ไข: เพื่อชี้แจงหากคุณเรียกใช้seq $(stty size | cut -d' ' -f1)
คำตอบอื่น ๆ จะออกจากครึ่งแรกของการส่งออกในขณะที่คำสั่งนี้จะออกจากครึ่งหลัง (เช่นผลลัพธ์ล่าสุด)