¿Cómo encuentro el número de líneas verticales disponibles en la terminal?

12

Estoy escribiendo un script que muestra el registro de git para un directorio cuando hago un CD en él. Tal registro puede ser abrumador, ya que contiene cientos de líneas. Hasta ahora he estado limitando eso a 20 líneas codificadas ( ... | head -n 20), lo cual está bien en la pantalla en el trabajo, pero demasiado en la pantalla más pequeña de MacBook en casa.

Preferiría que el registro ocupe aproximadamente la mitad de la pantalla (vertical) en cualquier terminal. Y "terminal" también cambia: es la terminal Gnome en el trabajo, pero iTerm2 en casa. Y no uso screen o tmux.

¿Cómo encuentro el número de líneas verticales disponibles en un terminal desde la línea de comando?

jalanb
fuente

Respuestas:

20

Los parámetros de la terminal se almacenan como $LINESy $COLUMNSvariables.

Además, puede usar un programa especial de operación de términos, por ejemplo 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.
Costas
fuente
99
LINESy COLUMNSsolo están fijados por algunos proyectiles. bashlos establece, pero solo para un shell interactivo (y no los exporta).
Sr.Spuratic
1
El entorno vars no existe en mi tcsh. Además, me pregunto si el sistema los restablecería si cambia el tamaño de la ventana de terminal. Tanto tput como stty funcionan para mí, así que aprendí algo nuevo :-)
jamesqf
La documentación de @jamesqf bash dice "Establecer automáticamente al recibir un SIGWINCH". así que sí, los cambia si cambia el tamaño de la ventana del terminal.
Celada
Para autoset arriba vaiable es responsable de las siguientes opciones shopt -s checkwinsizeque agregó en mi /etc/bash.bashrcarchivo con comentario:# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
Costas
9

Este comando debería darle el número de líneas en la terminal:

stty size | cut '-d ' -f1

Es posible que algunos sistemas no se implementen, stty sizepor lo que es posible que necesite algo como esto:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'
Celada
fuente
1
Esto parece muy específico del sistema operativo. ¿Puedes compilar la lista de sistemas donde funciona cada conjuro?
Warren Young
44
Tenía miedo de que el primero pudiera ser específico del sistema operativo, por eso agregué el segundo. De hecho, después de un poco de Google, veo que el primero probablemente no funcionará en Solaris. El segundo debe ser muy portátil. Honestamente, @Costas ' tput linesparece ser la mejor respuesta y la he votado. No lo sabía antes.
Celada
1
Me gustaría ofrecer un tubo largo sustituto con stty -aalgo como grep -Po 'rows \K[^;]*'osed -n 's/.*rows \([^;]*\).*/\1/p'
Costas
@Costas en realidad, frustrantemente, ni mi comando ni ninguno de los suyos funcionaron en MacOS, así que tuve que encontrar un comando diferente (editado). Vaya figura: MacOS emite "24 filas" en lugar de "filas 24"! ¡Todavía creo que tput lineses mucho mejor, y creo que es bastante portátil!
Celada