Como un ejemplo simple, quiero escribir un script CLI que pueda imprimir =en todo el ancho de la ventana del terminal.
#!/usr/bin/env php
<?php
echo str_repeat('=', ???);
o
#!/usr/bin/env python
print '=' * ???
o
#!/usr/bin/env bash
x=0
while [ $x -lt ??? ]; do echo -n '='; let x=$x+1 done; echo

Respuestas:
tput colste dice el número de columnas.tput lineste dice el número de filas.fuente
echo -e "lines\ncols"|tput -Spara obtener tanto las líneas como los cols, consulte: linux.about.com/library/cmd/blcmdl1_tput.htmtputes un gran comando con muchos comandos para leer el estado del terminal, controlar el cursor y las propiedades del texto, etc.alias dim="echo $(tput cols)x$(tput lines)"que podría resultar en80x50.alias dim='echo Terminal Dimensions: $(tput cols) columns x $(tput lines) rows'En bash, las variables ambientales
$LINESy$COLUMNSdeberían poder hacer el truco. El se configurará automáticamente ante cualquier cambio en el tamaño del terminal. (es decir, la señal SIGWINCH )fuente
checkwinsizeopción. Por ejemplo, este script no interactivo imprimirá las dimensiones del terminal en el que se ejecuta:shopt -s checkwinsize; (:); echo $LINES $COLUMNS(lacheckwinsizeopción solo inicializa las variables después de esperar a que termine una subshell, por eso necesitamos la(:)declaración)$LINESy$COLUMNSse actualizan después de queSIGWINCHse envía, en realidad después de cualquier ejecución de comando interactivo. Si intenta actualizarPS1contrap SIGWINCHno puede usar$LINESy$COLUMNS, mantienen los valores antiguos ((LINESyCOLUMNSsolo se establecen como variables de shell por bash. Bash no los establecerá como variables de entorno , a menos que exporte estas variables de shell.Y hay
stty, de coreutilsImprimirá el número de filas y columnas, o alto y ancho, respectivamente.
Luego puede usar cualquiera
cutoawkextraer la parte que desea.Eso es
stty size | cut -d" " -f1para la altura / líneas ystty size | cut -d" " -f2para el ancho / columnasfuente
fuente
trcomando todos estos años? (facepalm)yes '='generará una cantidad infinita de líneas '=' y los siguientes comandos se organizarán lo suficiente como para llenar el terminalPara hacer esto en el entorno de la CLI de Windows, la mejor manera que puedo encontrar es usar el comando de modo y analizar la salida.
¡Espero que sea útil!
NOTA : La altura devuelta es el número de líneas en el búfer, no es el número de líneas visibles dentro de la ventana. ¿Hay mejores opciones por ahí?
fuente
En POSIX, en última instancia, desea invocar la llamada
TIOCGWINSZ(Get WINdow SiZe)ioctl(). La mayoría de los idiomas deberían tener algún tipo de envoltorio para eso. Por ejemplo, en Perl puedes usar Término :: Tamaño :fuente
:io.columnsErlang:io:columns().erlang.org/doc/man/io.html#columns-0TIOCGWINSZen el estándar POSIX yioctl()solo se define para la función STREAMS obsoleta.Como mencioné en la respuesta de lyceus, su código fallará en Windows de configuración regional que no esté en inglés porque la salida de
modepuede no contener las subcadenas "columnas" o "líneas":Puede encontrar la subcadena correcta sin buscar texto:
Tenga en cuenta que ni siquiera me estoy molestando con las líneas porque no es confiable (y en realidad no me importan).
Editar: Según los comentarios sobre Windows 8 (oh, tú ...), creo que esto puede ser más confiable:
Sin embargo, pruébelo porque no lo probé.
fuente
---línea. i.imgur.com/4x02dqT.png$mode = `mode`; list($rows, $cols) = array_slice(preg_split('/\n/', substr($mode, strpos($mode, 'CON:'))), 2, 2);. Y luego simplemente reemplazo todo menos los números.CON device status:. Quizás emparejar algo asíCON.*:funcionaría mejor.Inspirado por la respuesta de @ pixelbeat, aquí hay una barra horizontal creada por un
tputligero mal uso delprintfrelleno / relleno ytrfuente
Hay algunos casos en los que sus filas / LÍNEAS y columnas no coinciden con el tamaño real del "terminal" que se está utilizando. Quizás no tenga un "tput" o "stty" disponible.
Aquí hay una función bash que puede usar para verificar visualmente el tamaño. Esto funcionará hasta 140 columnas x 80 filas. Puede ajustar los máximos según sea necesario.
fuente