Làm cách nào để sử dụng `cat` hoặc` less` tùy thuộc vào số dòng?


12

Khi xem nội dung của các tệp, tôi muốn tự động rút catngắn các tệp nhưng lessnhững tệp vượt quá kích thước màn hình. Tôi có thể sử dụng một cái gì đó với wc -l, nhưng có cách nào tốt hơn mà cũng có thể xem xét kích thước cửa sổ / số lượng dòng hiện tại có sẵn không?


1
Trong khi nhiều công cụ làm điều này, lưu ý rằng nó phá vỡ sự mong đợi. Tức là người dùng không thể biết trước những gì sẽ xảy ra. Tôi thấy điều này gây phiền nhiễu, ví dụ trong git logđó thực hiện điều này chính xác. Bạn không bao giờ biết trước những gì bạn sẽ nhận được (bạn có phải đánh qkhông?).
bitmask

4
LƯU Ý: Nói chung, bạn nên tránh sử dụng catđể xem các tập tin. Thông thường, bạn chỉ nên sử dụng catđể gửi nội dung của tệp tới thiết bị xuất chuẩn để có thể chuyển sang quy trình khác. Lý do để tránh sử dụng catđể xem là vì nó gửi các byte thô đến thiết bị đầu cuối, điều này có thể khiến các lệnh đầu cuối không mong muốn được thực thi (ví dụ: một số người dùng đã bị kẹt khi một tệp tình cờ chứa đúng byte để tắt bàn phím đầu cuối) . Bạn thường nên sử dụng một máy nhắn tin như lesshoặc trình soạn thảo, định dạng này sẽ định dạng các ký tự đặc biệt để hiển thị để chúng không bị thiết bị đầu cuối giải thích.
Chris Trang

2
Nếu bạn sẽ sử dụng mèo để xem nội dung tệp trực tiếp trong thiết bị đầu cuối, ít nhất hãy sử dụng cat -vđể nó thoát các ký tự đặc biệt.
Chris Trang

@bitmask điểm tốt, đó là lý do tại sao tôi hỏi Có thể chia màn hình catkhông? đó có thể là một giải pháp tốt hơn
Tobias Kienzler

@ChrisPage Bàn phím của tôi không bị giết, nhưng tôi nghĩ rằng tôi đã xoay sở để mã hóa bảng mã một lần ... Cảm ơn bạn đã chỉ cat -vra
Tobias Kienzler

Câu trả lời:


9

Để cung cấp cho bạn công thức liên quan đến wckiểm tra dựa trên:

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

Có một $LINESbiến shell cũng có thể được sử dụng:

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

Nhưng $LINESchỉ được cập nhật khi tại dấu nhắc lệnh. Để hiểu ý tôi, hãy chạy cái này và thay đổi kích thước cửa sổ terminal trong sleep:

( sleep 3; echo $LINES; tput lines )

Cảm ơn, điều này có lợi thế là nó có thể được điều chỉnh để sử dụng lessnếu ví dụ 2/3 màn hình được sử dụng cat.
Tobias Kienzler

20

Có lẽ 'less -F file_to_read' là tùy chọn: nó thoát ít hơn nếu cửa sổ đủ để hiển thị tất cả các tệp và đợi trên máy nhắn tin nếu không phải là trường hợp


Nghe có vẻ hay, nhưng điều đó không tạo ra bất cứ điều gì trong trường hợp đó và mã thoát giống nhau trong cả hai trường hợp
Tobias Kienzler

Tôi chỉ thử 'less -F / etc / passwd' và nó hiển thị tệp chính xác (có hoặc không có máy nhắn tin). Bạn đã đúng, mã trả về là 0 trong cả hai trường hợp.
Dom

11
Lệnh đó hoạt động theo yêu cầu, nhưng với một trục trặc nhỏ: nó xóa màn hình sau khi hiển thị tệp. Thêm -Xtùy chọn sẽ dừng xóa, vì vậy các tệp ngắn sẽ được hiển thị như thế cat. Thật không may với -Xmàn hình sẽ không bị xóa sau khi hiển thị các tập tin cuộn dài.
manatwork

1
@manatwork thật tuyệt, cảm ơn. Không xóa màn hình là thực sự ổn, vì đó là điều sẽ (không) xảy ra nếu catđược gọi là tốt
Tobias Kienzler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.