¿Cómo se genera texto en negrita en Bash?
Estoy escribiendo un script Bash que imprime texto en la pantalla:
echo "Some Text"
¿Puedo formatear el texto? Me gustaría ponerlo en negrita.
La forma más compatible de hacer esto es usar tput
para descubrir las secuencias correctas para enviar al terminal:
bold=$(tput bold)
normal=$(tput sgr0)
entonces puedes usar las variables $bold
y $normal
formatear las cosas:
echo "this is ${bold}bold${normal} but this isn't"
da
esto es atrevido pero esto no lo es
Para aplicar un estilo a su cadena, puede usar un comando como:
echo -e '\033[1mYOUR_STRING\033[0m'
Explicación:
- echo -e : la
-e
opción significa que las cadenas con escape (barra invertida) se interpretarán - \033 - la secuencia de escape representa el principio/final del estilo
- m minúscula : indica el final de la secuencia
- 1 - Atributo en negrita (consulte más abajo para obtener más información)
- [0m : restablece todos los atributos, colores, formato, etc.
Los números enteros posibles son:
- 0 - Estilo normal
- 1 - Negrita
- 2 - tenue
- 3 - cursiva
- 4 - Subrayado
- 5 - Parpadeando
- 7 - revertir
- 8 -Invisibles
Todo esto es según ANSI , pero lo implementa la mayoría absoluta de emuladores de terminal que existen. Una forma alternativa de diseñar la salida es confiar en terminfo mediante el uso del tput
comando. Lo más probable es que este último genere secuencias de escape que son ANSI de todos modos, a menos que esté en un tipo de terminal realmente oscuro y/o exótico.
Supongo que bash se está ejecutando en un terminal compatible con vt100 en el que el usuario no desactivó explícitamente la compatibilidad con el formateo.
Primero, active la compatibilidad con caracteres especiales en echo
, usando -e
la opción. Luego, use la secuencia de escape ansi ESC[1m
, como:
echo -e "\033[1mSome Text"
Más información sobre secuencias de escape ansi, por ejemplo, aquí: ascii-table.com/ansi-escape-sequences-vt-100.php
En teoría así:
# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line
# Using tput
tput bold
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL
# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line.
Pero en la práctica puede interpretarse como un color de "alta intensidad".
(fuente: http://unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html )