วิธีใช้ `cat` หรือ` less` ขึ้นอยู่กับจำนวนบรรทัด?


12

เมื่อดูเนื้อหาของไฟล์ฉันต้องการcatย่อไฟล์โดยอัตโนมัติแต่ไฟล์lessที่เกินขนาดหน้าจอ ฉันสามารถใช้บางอย่างกับwc -lแต่มีวิธีที่ดีกว่าที่อาจพิจารณาขนาดหน้าต่าง / จำนวนบรรทัดปัจจุบันใช้ได้หรือไม่


1
ในขณะที่เครื่องมือจำนวนมากทำสิ่งนี้โปรดทราบว่ามันทำให้เสียความคาดหวัง คือผู้ใช้ไม่สามารถทราบล่วงหน้าว่าจะเกิดอะไรขึ้น ฉันพบว่ามันน่ารำคาญเช่นในgit logสิ่งที่ทำสิ่งนี้ คุณไม่มีทางรู้ล่วงหน้าว่าคุณจะได้อะไร (ต้องตีqบ้าง)
bitmask

4
หมายเหตุ: โดยทั่วไปคุณควรหลีกเลี่ยงการใช้catเพื่อดูไฟล์ โดยทั่วไปคุณควรใช้catเพื่อส่งเนื้อหาของไฟล์ไปยัง stdout เท่านั้นเพื่อให้สามารถส่งไปยังกระบวนการอื่นได้ เหตุผลในการหลีกเลี่ยงการใช้catสำหรับการดูคือมันส่งไบต์ดิบไปยังเทอร์มินัลซึ่งอาจทำให้คำสั่งเทอร์มินัลที่ไม่คาดคิดถูกดำเนินการ (เช่นผู้ใช้บางคนติดค้างเมื่อไฟล์เกิดขึ้น . โดยปกติคุณควรใช้เพจเจอร์lessหรือตัวแก้ไขซึ่งจะจัดรูปแบบอักขระพิเศษเพื่อแสดงดังนั้นเทอร์มินัลจะไม่ถูกตีความ
Chris หน้า

2
หากคุณจะใช้ cat เพื่อดูเนื้อหาไฟล์โดยตรงในเทอร์มินัลอย่างน้อยก็ใช้cat -vเพื่อหลีกเลี่ยงอักขระพิเศษ
Chris หน้า

@ bitmask จุดดีนั่นคือเหตุผลที่ฉันถามเป็นcatไปได้ที่จะแยกหน้าจอไอเอ็นจี? ซึ่งอาจเป็นทางออกที่ดีกว่า
Tobias Kienzler

แป้นพิมพ์ @ChrisPage ของฉันไม่ได้ฆ่า แต่ฉันคิดว่าฉันจัดการเพื่อกรูขึ้นเพจรหัสครั้ง ... ขอขอบคุณที่ชี้cat -vออก
โทเบียส KIENZLER

คำตอบ:


9

หากต้องการให้สูตรซึ่งเกี่ยวข้องกับการwcตรวจสอบตาม:

(($(wc -l<input_file)<=$(tput lines))) && echo 'will fit' || echo 'not enough'

มี$LINESตัวแปรเชลล์ซึ่งสามารถใช้งานได้:

(($(wc -l<input_file)<=LINES)) && echo 'will fit' || echo 'not enough'

แต่$LINESจะมีการอัพเดทก็ต่อเมื่อพรอมต์คำสั่ง เพื่อให้เข้าใจถึงสิ่งที่ฉันหมายถึงเรียกใช้สิ่งนี้และปรับขนาดหน้าต่างเทอร์มินัลในช่วงsleep:

( sleep 3; echo $LINES; tput lines )

ขอบคุณนี้มีประโยชน์ที่จะสามารถนำมาปรับใช้lessแล้วถ้าเช่น 2/3 catของหน้าจอที่ถูกใช้โดย
โทเบียส Kienzler

20

อาจเป็น 'less -F file_to_read' เป็นตัวเลือก: มันจะออกน้อยกว่าถ้าหน้าต่างมีเพียงพอที่จะแสดงไฟล์ทั้งหมดและรอเพจเจอร์ถ้ามันไม่ใช่กรณี


ฟังดูดี แต่นั่นก็ไม่ได้เอาท์พุทอะไรเลยในกรณีนั้นและรหัสทางออกก็เหมือนกันทั้งสองกรณี
Tobias Kienzler

ฉันแค่ลอง 'less -F / etc / passwd' และมันจะแสดงไฟล์อย่างถูกต้อง (มีหรือไม่มีเพจเจอร์) คุณถูกต้องรหัสส่งคืนคือ 0 ทั้งสองกรณี
Dom

11
คำสั่งนั้นทำงานได้ตามที่ร้องขอ แต่ด้วยความผิดพลาดเล็กน้อย: มันจะล้างหน้าจอหลังจากแสดงไฟล์ การเพิ่ม-Xตัวเลือกจะหยุดการล้างดังนั้นไฟล์สั้น ๆ จะปรากฏขึ้นเหมือนที่catทำ น่าเสียดาย-Xที่หน้าจอจะไม่ถูกล้างหลังจากแสดงไฟล์แบบยาวและเลื่อน
จัดการ

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