ฉันจะค้นหาจำนวนของเส้นแนวตั้งที่มีอยู่ในเครื่องได้อย่างไร


12

ฉันกำลังเขียนสคริปต์ซึ่งแสดงบันทึก git สำหรับไดเรกทอรีเมื่อฉันเข้าไป บันทึกดังกล่าวอาจมีจำนวนหลายร้อยบรรทัด จนถึงตอนนี้ฉันได้ จำกัด ไว้แค่ 20 บรรทัด ( ... | head -n 20) ซึ่งใช้งานได้ดีบนหน้าจอ แต่ก็มากเกินไปสำหรับหน้าจอ MacBook ขนาดเล็กที่บ้าน

ฉันต้องการให้บันทึกใช้เวลาประมาณครึ่งหนึ่งของหน้าจอ (แนวตั้ง) บนเทอร์มินัลทั้งสอง และ "เทอร์มินัล" ก็เปลี่ยนเช่นกันมันคือ Gnome terminal ในที่ทำงาน แต่ iTerm2 อยู่ที่บ้าน และฉันไม่ได้ใช้หน้าจอหรือ tmux

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

คำตอบ:


21

พารามิเตอร์เทอร์มินัลถูกจัดเก็บเป็น$LINESและ$COLUMNSตัวแปร

นอกจากนี้คุณสามารถใช้ programm termation operation พิเศษตัวอย่างเช่นtput:

tput lines  # outputs the number of lines of the present terminal window.
tput cols   # outputs the number of columns of the present terminal window.

9
LINESและCOLUMNSถูกตั้งค่าโดยเชลล์บางตัวเท่านั้น bashตั้งค่าแต่สำหรับเชลล์เชิงโต้ตอบเท่านั้น (และไม่ส่งออก)
mr.spuratic

1
สภาพแวดล้อมไม่มี vars ใน tcsh ของฉัน นอกจากนี้ฉันสงสัยว่าระบบจะรีเซ็ตหากคุณปรับขนาดหน้าต่างเทอร์มินัล ทั้ง tput และ stty ใช้ได้ผลกับฉันดังนั้นฉันจึงได้เรียนรู้สิ่งใหม่ :-)
jamesqf

@jamesqf bash document กล่าวว่า "ตั้งค่าโดยอัตโนมัติเมื่อได้รับ SIGWINCH" ดังนั้นใช่มันเปลี่ยนหากคุณปรับขนาดหน้าต่างเทอร์มินัล
Celada

สำหรับชุดข้อมูลอัตโนมัติด้านบนมีตัวเลือกต่อไปนี้เป็นผู้รับผิดชอบshopt -s checkwinsizeซึ่งเพิ่มไว้ใน/etc/bash.bashrcไฟล์ของฉันด้วยความคิดเห็น:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas

9

คำสั่งนี้ควรให้จำนวนบรรทัดบนเทอร์มินัล:

stty size | cut '-d ' -f1

ระบบบางระบบอาจไม่ใช้งานstty sizeดังนั้นคุณอาจต้องการสิ่งนี้แทน:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'

1
ดูเหมือนว่าเฉพาะระบบปฏิบัติการเท่านั้น คุณสามารถรวบรวมรายชื่อระบบที่แต่ละคาถาทำงานได้หรือไม่?
Warren Young

4
ฉันกลัวว่าตัวแรกอาจเป็นระบบปฏิบัติการเฉพาะซึ่งเป็นสาเหตุที่ฉันเพิ่มอันที่สอง แน่นอนหลังจาก Googling เล็กน้อยฉันเห็นว่าคนแรกอาจไม่ทำงานกับ Solaris อันที่สองควรพกพาได้มาก สุจริต @Costas ' tput linesดูเหมือนคำตอบที่ดีกว่าและฉันได้ upvoted มัน ฉันไม่เคยรู้จักมาก่อน
Celada

1
ฉันต้องการเสนอท่อยาวแทนด้วยstty -aสิ่งที่ต้องการgrep -Po 'rows \K[^;]*'หรือsed -n 's/.*rows \([^;]*\).*/\1/p'
Costas

@Costas ที่จริงแล้วน่าผิดหวังทั้งคำสั่งของฉันและหนึ่งในนั้นไม่ได้ทำงานกับ MacOS ดังนั้นฉันต้องหาคำสั่งที่แตกต่างออกไป (แก้ไข) ไปที่รูป: MacOS ส่งเสียง "24 แถว" แทน "แถว 24"! ฉันยังคิดว่าtput linesดีกว่าและฉันคิดว่ามันพกพาได้ดี!
Celada
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.