2012-09-18 13 views
5

Estoy creando un script simple basado en consola usando un script de shell. Se ejecutará en mi shell bash Es un sencillo menú basado en la visualización de un conjunto de opciones.Centro de alineación de texto - script de shell

Ahora quiero hacer centro alinear el texto dependiendo del tamaño de la pantalla. ¿Cómo alinear el texto en el centro de la pantalla Por favor, Assis

Respuesta

11

fin encontré la solución :)

COLUMNS=$(tput cols) 
title="Hello world!" 
printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title" 
+1

si necesita un trazador de líneas, que toma la entrada de los argumentos de línea de comandos: '' 'printf"% * s \ n "$ ((($ (echo $ * | wc -c) + 80)/2)) "$ *" '' ' toma entrada de los argumentos de línea de comandos, utiliza wc para contar el número de caracteres, y el valor predeterminado justifica a 80 caracteres. – thewisenerd

0

solución Perl simple:?

perl -pe '$sp = " " x (($ENV{COLUMNS} - length)/2); s/^/$sp/' 
+0

¿funcionará en shell-script? –

+0

Pruébalo para ver. Simplemente agregue la línea en su script, canalice el texto para centrarlo en él ('generate-text | perl ...') o utilícelo como argumento ('perl ... text.txt') – choroba

+0

Finalmente encontré el solución: COLUMNAS = $ (tput cols) title = "¡Hola, mundo!" printf "% * s \ n" $ ((($ {# título} + $ COLUMNS)/2)) "$ title" –

5

En los sistemas basados ​​en BSD , incluida MacOS, la utilidad fmt tiene un indicador -c para centrar el texto.

echo $text | fmt -c -w $COLUMNS 

Desafortunadamente, GNU fmt tiene una bandera -c incompatibles y no hay alternativa para el centrado.