ล้างครึ่งหนึ่งของหน้าจอจากบรรทัดคำสั่ง


11

มีวิธีล้างเทอร์มินัล แต่แทนที่จะปล่อยพรอมต์ที่ด้านบนของหน้าจอทิ้งไว้ตรงกลางหรือไม่ ดูเหมือนว่าclearโดยทั่วไปจะไม่สนใจพารามิเตอร์บรรทัดคำสั่งทั้งหมด

ฉันคิดว่าจะมีวิธีในการทำเช่นนี้tputแต่ไม่สามารถหาได้

คำตอบ:


12

คุณสามารถใช้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 ของคุณจะแก้ไขปัญหาได้


บนยูนิกซ์นี่ไม่ได้ล้างข้อความให้ฉัน แต่จะย้ายเคอร์เซอร์
James Owers

1
เสียงเหมือนบั๊กคงที่เมื่อสิบปีก่อน อาจถึงเวลาอัพเกรดสิ่งต่าง ๆ
Thomas Dickey

0

หากการนับบรรทัดเป็นเลขคี่ให้tput cupลบทั้งหน้า
การเขียนแบบนี้ควรแก้ไขว่า:

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed

-1

หากคุณสนใจที่จะล้างครึ่งล่างของหน้าจอในขณะที่ยังคงพักอยู่ส่วนนี้จะใช้งานได้:

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)คำตอบอื่น ๆ จะออกจากครึ่งแรกของการส่งออกในขณะที่คำสั่งนี้จะออกจากครึ่งหลัง (เช่นผลลัพธ์ล่าสุด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.