¿Cómo se genera un texto en negrita en Bash?


241

Estoy escribiendo un script Bash que imprime algo de texto en la pantalla:

echo "Some Text"

¿Puedo formatear el texto? Me gustaría ponerlo en negrita.

Respuestas:


427

La forma más compatible de hacerlo es utilizar tputpara descubrir las secuencias correctas para enviar al terminal:

bold=$(tput bold)
normal=$(tput sgr0)

entonces puedes usar las variables $boldy $normalformatear cosas:

echo "this is ${bold}bold${normal} but this isn't"

da

esto es audaz pero esto no es


2
Eso es bastante ingenioso. Si entiendo correctamente, esto es lo mismo que insertar los escapes, pero funcionaría en otros terminales (no VT100).
JamesRat

Eso es correcto: busca los códigos apropiados de acuerdo con el valor de TERM.
Psmears

2
Si necesita subrayar texto, puede agregar una variable. Tenga en cuenta que los backticks se eliminan del formato de comentarios. Use el mismo formato en la respuesta. tput smul
SUBRAYADO

3
tputes un gran comando con muchos comandos para muchas tareas diferentes.
Drew Noakes

Estoy intentando algo similar a lo que está haciendo el OP, pero con un motdarchivo. ¿Cómo / dónde definiría las variables $boldy $normalen esa instancia?
Matt

74

Para aplicar un estilo en su cadena, puede usar un comando como:

echo -e '\033[1mYOUR_STRING\033[0m'

Explicación:

  • echo -e : la -eopción significa que se interpretarán las cadenas escapadas (reducidas)
  • \ 033 - la secuencia escapada representa el comienzo / final del estilo
  • m minúscula : indica el final de la secuencia
  • 1 - Atributo en negrita (ver más abajo para más)
  • [0m : restablece todos los atributos, colores, formato, etc.

Los posibles enteros son:

  • 0 - Estilo normal
  • 1 - Negrita
  • 2 - tenue
  • 3 - Cursiva
  • 4 - Subrayado
  • 5 - Parpadeo
  • 7 - Reverso
  • 8 - Invisible

1
Buena explicación. Estaba buscando qué funcionalidades [0mofrece y esto lo explica bien
Jeremy

Aunque debería ser\033[0m
Jeremy

1
3- cursiva , al menos en konsole
David Tabernero M.

Uno desearía que Strikethrough fuera compatible con Ubuntu y algunas de las otras plataformas populares.
Dark Star1

45

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 el soporte para caracteres especiales en echo, usando la -eopción. Más tarde, use la secuencia de escape ansi ESC[1m, como:

echo -e "\033[1mSome Text"

Más información sobre las secuencias de escape ansi, por ejemplo aquí: ascii-table.com/ansi-escape-sequences-vt-100.php


Gracias. Encontré algunas otras listas de secuencias de escape, ¡pero la que vinculaste es muy extensa!
JamesRat

18
No olvide detener el formato en negrita al final de la cadena: de lo echo -e "\033[1mSome Text\033[0m"contrario, las siguientes líneas de su terminal también estarán en negrita
mems

Esta solución funciona incluso con PHP-CLI, eso es una ventaja frente a otra solución.
David

si tiene problemas para recordar \033puede usar \ecomoecho -e "\e[1msome text\e[0m"
Felipe Alvarez

1
La secuencia de escape octal está permitida en JS (JavaScript)
Pat-Laugh el

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.