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.

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 é


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

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.