Làm cách nào để tìm số dòng dọc có sẵn trong thiết bị đầu cuối?


12

Tôi đang viết một tập lệnh hiển thị nhật ký git cho một thư mục khi tôi cd vào nó. Một bản ghi như vậy có thể áp đảo, chứa hàng trăm dòng. Cho đến nay tôi đã giới hạn ở mức 20 dòng ( ... | head -n 20) được mã hóa cứng , tốt trên màn hình tại nơi làm việc, nhưng quá nhiều trên màn hình MacBook nhỏ hơn ở nhà.

Tôi muốn bản ghi chiếm khoảng một nửa màn hình (dọc) trên một trong hai thiết bị đầu cuối. Và "thiết bị đầu cuối" cũng thay đổi: đó là thiết bị đầu cuối Gnome tại nơi làm việc, nhưng iTerm2 ở nhà. Và tôi không sử dụng màn hình hoặc tmux.

Làm cách nào để tìm số dòng dọc có sẵn trong thiết bị đầu cuối từ dòng lệnh?

Câu trả lời:


20

Các tham số đầu cuối được lưu trữ dưới dạng $LINES$COLUMNScác biến.

Ngoài ra, bạn có thể sử dụng chương trình hoạt động có thời hạn đặc biệt, ví dụ 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
LINESCOLUMNSchỉ được thiết lập bởi một số vỏ. bashđặt chúng, nhưng chỉ cho một vỏ tương tác (và nó không xuất chúng).
mr.spuratic

1
Các vars môi trường không tồn tại trong tcsh của tôi. Ngoài ra, tôi tự hỏi nếu hệ thống sẽ thiết lập lại chúng nếu bạn thay đổi kích thước cửa sổ đầu cuối. Cả tput và stty đều làm việc cho tôi, vì vậy tôi đã học được một điều mới :-)
jamesqf

Tài liệu bash @jamesqf cho biết "Tự động được đặt khi nhận được SIGWINCH." vì vậy, vâng, nó sẽ thay đổi chúng nếu bạn thay đổi kích thước cửa sổ terminal.
Celada 11/2/2015

Đối với ô tô tự động ở trên, các tùy chọn sau có thể chịu trách nhiệm shopt -s checkwinsizeđược thêm vào trong /etc/bash.bashrctệp của tôi kèm theo nhận xét:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas

9

Lệnh này sẽ cung cấp cho bạn số lượng dòng trên thiết bị đầu cuối:

stty size | cut '-d ' -f1

Một số hệ thống có thể không triển khai stty sizenên bạn có thể cần một cái gì đó như thế này:

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

1
Điều này có vẻ rất cụ thể hệ điều hành. Bạn có thể biên dịch danh sách các hệ thống mà mỗi câu thần chú hoạt động không?
Warren Young

4
Tôi sợ rằng cái đầu tiên có thể là hệ điều hành cụ thể, đó là lý do tại sao tôi thêm cái thứ hai. Thật vậy, sau một chút Googling tôi thấy rằng cái đầu tiên có lẽ sẽ không hoạt động trên Solaris. Cái thứ hai nên rất di động. Thành thật mà nói, @Costas ' tput linescó vẻ như là câu trả lời tốt hơn và tôi đã nâng cao nó. Tôi đã không biết về nó trước đây.
Celada 10/2/2015

1
Tôi muốn cung cấp đường ống dài thay thế stty -abằng một cái gì đó như grep -Po 'rows \K[^;]*'hoặcsed -n 's/.*rows \([^;]*\).*/\1/p'
Costas

@Costas thực sự, thật bực bội, cả lệnh của tôi lẫn một trong hai bạn đều không hoạt động trên MacOS, vì vậy tôi đã phải đưa ra một lệnh khác (đã được chỉnh sửa). Hình: MacOS phát ra "24 hàng" thay vì "hàng 24"! Tôi vẫn nghĩ tput lineslà cách tốt hơn, và tôi nghĩ nó khá di động!
Celada 11/2/2015
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.