Bagaimana cara menemukan jumlah garis vertikal yang tersedia di terminal?


12

Saya sedang menulis skrip yang menunjukkan git log untuk direktori ketika saya memasukkannya ke dalamnya. Log seperti itu bisa luar biasa, mengandung ratusan baris. Sejauh ini saya telah membatasi bahwa untuk 20 baris kode keras ( ... | head -n 20), yang bagus di layar di tempat kerja, tetapi terlalu banyak pada layar MacBook yang lebih kecil di rumah.

Saya lebih suka log untuk mengambil sekitar setengah layar (vertikal) di terminal manapun. Dan "terminal" juga berubah: terminal Gnome sedang bekerja, tetapi iTerm2 di rumah. Dan saya tidak menggunakan layar atau tmux.

Bagaimana cara menemukan jumlah garis vertikal yang tersedia di terminal dari baris perintah?

Jawaban:


20

Parameter terminal disimpan sebagai $LINESdan $COLUMNSvariabel.

Selain itu, Anda dapat menggunakan program operasi-istilah khusus, misalnya 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
LINESdan COLUMNShanya diatur oleh beberapa shell. bashset mereka, tetapi hanya untuk shell interaktif (dan itu tidak mengekspornya).
mr.spuratic

1
Vars lingkungan tidak ada di tcsh saya. Juga, saya bertanya-tanya apakah sistem akan mengatur ulang mereka jika Anda mengubah ukuran jendela terminal. Baik tput dan stty bekerja untuk saya, jadi saya belajar sesuatu yang baru :-)
jamesqf

Dokumentasi @jamesqf bash mengatakan "Diatur secara otomatis setelah menerima SIGWINCH." jadi, ya, itu mengubah mereka jika Anda mengubah ukuran jendela terminal.
Celada

Untuk autoset di atas vaiable opsi berikut bertanggung jawab shopt -s checkwinsizeyang ditambahkan dalam /etc/bash.bashrcfile saya dengan komentar:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas

9

Perintah ini akan memberi Anda jumlah baris pada terminal:

stty size | cut '-d ' -f1

Beberapa sistem mungkin tidak menerapkan stty sizesehingga Anda mungkin memerlukan sesuatu seperti ini sebagai gantinya:

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

1
Ini sepertinya sangat spesifik untuk OS. Bisakah Anda menyusun daftar sistem di mana setiap mantera bekerja?
Warren Young

4
Saya takut yang pertama mungkin spesifik untuk OS, itulah sebabnya saya menambahkan yang kedua. Memang setelah sedikit Googling saya melihat bahwa yang pertama mungkin tidak akan berfungsi pada Solaris. Yang kedua harus sangat portabel. Jujur, @Costas ' tput linessepertinya jawaban yang lebih baik dan saya telah memutarnya. Saya tidak tahu tentang itu sebelumnya.
Celada

1
Saya ingin menawarkan pipa panjang pengganti dengan stty -asesuatu seperti grep -Po 'rows \K[^;]*'ataused -n 's/.*rows \([^;]*\).*/\1/p'
Costas

@Costas sebenarnya, dengan frustrasi, baik perintah saya maupun salah satu dari Anda tidak berfungsi pada MacOS, jadi saya harus membuat perintah yang berbeda (diedit). Go figure: MacOS memancarkan "24 baris" bukannya "baris 24"! Saya masih berpikir tput linesitu jauh lebih baik, dan saya pikir ini cukup portabel!
Celada
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.