Comment sortir du texte en gras dans Bash?

241

J'écris un script Bash qui imprime du texte à l'écran:

echo "Some Text"

Puis-je formater le texte? Je voudrais le mettre en gras.

JamesRat
la source

Réponses:

427

La façon la plus compatible de le faire consiste à utiliser tputpour découvrir les bonnes séquences à envoyer au terminal:

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

alors vous pouvez utiliser les variables $boldet $normalformater les choses:

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

donne

c'est audacieux mais ce n'est pas

psmears
la source
2
C'est assez chouette. Si je comprends bien, c'est la même chose que d'insérer les échappements, mais cela fonctionnerait dans d'autres terminaux (pas VT100).
JamesRat
C'est exact - il recherche les codes appropriés en fonction de la valeur de TERM.
psmears
2
Si vous avez besoin de souligner du texte, vous pouvez ajouter une variable. Notez que les backticks sont supprimés de la mise en forme des commentaires. Utilisez le même format dans la réponse. UNDERLINE =tput smul
jayem
3
tputest une excellente commande avec beaucoup de commandes pour de nombreuses tâches différentes.
Drew Noakes du
J'essaie de faire quelque chose de similaire à ce que fait l'OP, mais avec un motdfichier. Comment / où définirais-je les variables $boldet $normaldans ce cas?
Matt
74

Afin d'appliquer un style à votre chaîne, vous pouvez utiliser une commande comme:

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

Explication:

  • echo -e - L' -eoption signifie que les chaînes échappées (contre-obliques) seront interprétées
  • \ 033 - la séquence échappée représente le début / la fin du style
  • m minuscule - indique la fin de la séquence
  • 1 - Attribut gras (voir ci-dessous pour plus)
  • [0m - réinitialise tous les attributs, couleurs, mise en forme, etc.

Les entiers possibles sont:

  • 0 - Style normal
  • 1 - Audacieux
  • 2 - Dim
  • 3 - Italique
  • 4 - Souligné
  • 5 - Clignotant
  • 7 - Marche arrière
  • 8 - Invisible
avivamg
la source
1
Bonne explication. Je cherchais ce que la fonctionnalité [0moffre et cela l'explique bien
Jeremy
Bien que cela devrait être\033[0m
Jeremy
1
3- italique , au moins à konsole
David Tabernero M.
On souhaite que Strikethrough soit pris en charge sur Ubuntu et certaines des autres plates-formes populaires.
Dark Star1
45

Je suppose que bash s'exécute sur un terminal compatible vt100 dans lequel l'utilisateur n'a pas explicitement désactivé la prise en charge du formatage.

Tout d'abord, activez la prise en charge des caractères spéciaux dans echo, en utilisant l' -eoption. Plus tard, utilisez la séquence d'échappement ansi ESC[1m, comme:

echo -e "\033[1mSome Text"

Plus d'informations sur les séquences d'échappement ansi par exemple ici: ascii-table.com/ansi-escape-sequences-vt-100.php

Michał Trybus
la source
Merci. J'ai trouvé d'autres listes de séquences d'échappement, mais celle à laquelle vous avez lié est très complète!
JamesRat
18
N'oubliez pas d'arrêter le formatage en gras à la fin de la chaîne: echo -e "\033[1mSome Text\033[0m"sinon les lignes suivantes de votre terminal seront également en gras
mems
Cette solution fonctionne même avec PHP-CLI, c'est un avantage par rapport à une autre solution.
David
si vous avez du mal à \033vous souvenir que vous pouvez utiliser \ecommeecho -e "\e[1msome text\e[0m"
Felipe Alvarez
1
La séquence d'échappement octale est autorisée dans JS (JavaScript)
Pat-Laugh
14

En théorie comme ça:

# 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. 

Mais dans la pratique, elle peut être interprétée comme une couleur de «haute intensité».

(source: http://unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html )

roufamatic
la source