Como se gera texto em negrito no Bash?

241

Estou escrevendo um script Bash que imprime algum texto na tela:

echo "Some Text"

Posso formatar o texto? Eu gostaria de torná-lo ousado.

JamesRat
fonte

Respostas:

427

A maneira mais compatível de fazer isso é usar tputpara descobrir as seqüências corretas a serem enviadas ao terminal:

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

então você pode usar as variáveis $bolde $normalformatar as coisas:

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

isso é ousado, mas isso não é

psmears
fonte
2
Isso é bem bacana. Se bem entendi, é o mesmo que inserir as fugas, mas funcionaria em outros terminais (não no VT100).
JamesRat
Está correto - procura os códigos apropriados de acordo com o valor de TERM.
Psmears 27/05
2
Se você precisar sublinhar o texto, poderá adicionar uma variável. Observe que os backticks estão sendo removidos da formatação de comentários. Use o mesmo formato na resposta. tput smul
UNDERLINE
3
tputé um ótimo comando com muitos comandos para muitas tarefas diferentes.
de Drew Noakes
Estou tentando algo semelhante ao que o OP está fazendo, mas com um motdarquivo. Como / onde eu definiria as variáveis $bolde $normalnessa instância?
25414 Matt
74

Para aplicar um estilo à sua string, você pode usar um comando como:

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

Explicação:

  • echo -e - A -eopção significa que as seqüências de escape (barra invertida) serão interpretadas
  • \ 033 - a seqüência de escape representa o início / fim do estilo
  • m minúsculo - indica o fim da sequência
  • 1 - Atributo em negrito (veja mais abaixo)
  • [0m - redefine todos os atributos, cores, formatação etc.

Os possíveis números inteiros são:

  • 0 0 - Estilo Normal
  • 1 - Negrito
  • 2 - Dim
  • 3 - Itálico
  • 4 - Sublinhado
  • 5 - Piscando
  • 7 - Reverso
  • 8 - Invisível
avivamg
fonte
1
Boa explicação. Estava olhando ao redor para que funcionalidade [0mofertas e isso explica-lo bem
Jeremy
Embora deva ser\033[0m
Jeremy
1
3- itálico , pelo menos em konsole
David Tabernero M.
Desejamos que o Strikethrough tenha suporte no Ubuntu e em algumas das outras plataformas populares.
Escuro Star1
45

Presumo que o bash esteja sendo executado em um terminal compatível com vt100 no qual o usuário não desativou explicitamente o suporte para formatação.

Primeiro, ative o suporte para caracteres especiais echousando a -eopção Mais tarde, use a sequência de escape ansi ESC[1m, como:

echo -e "\033[1mSome Text"

Mais sobre sequências de escape ansi, por exemplo, aqui: ascii-table.com/ansi-escape-sequences-vt-100.php

Michał Trybus
fonte
Obrigado. Encontrei algumas outras listas de sequências de escape, mas a que você vinculou é muito extensa!
JamesRat 27/05
18
Não se esqueça de parar a formatação em negrito no final da string: echo -e "\033[1mSome Text\033[0m"outra as seguintes linhas de seu terminal estará em negrito também
MEMS
Esta solução funciona mesmo com PHP-CLI, que é uma vantagem em relação a outra solução.
David
Se você tem dificuldade para lembrar \033que você pode usar \ecomoecho -e "\e[1msome text\e[0m"
Felipe Alvarez
1
A sequência de escape octal é permitida em JS (JavaScript)
Pat-Laugh
14

Em teoria assim:

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

Mas, na prática, pode ser interpretado como cor de "alta intensidade".

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

roufamatic
fonte