Come si fa a scrivere in grassetto in Bash?


241

Sto scrivendo uno script Bash che stampa del testo sullo schermo:

echo "Some Text"

Posso formattare il testo? Vorrei renderlo audace.

Risposte:


427

Il modo più compatibile per farlo è usare tputper scoprire le giuste sequenze da inviare al terminale:

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

allora puoi usare le variabili $bolde $normalformattare le cose:

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

questo è audace ma non lo è


2
È abbastanza carino. Se ho capito bene, questo equivale a inserire le escape, ma funzionerebbe in altri terminali (non VT100).
JamesRat,

È corretto: cerca i codici appropriati in base al valore di TERM.
psmears,

2
Se hai bisogno di sottolineare il testo, puoi aggiungere una variabile. Si noti che i backtick vengono rimossi dalla formattazione dei commenti. Usa lo stesso formato nella risposta. tput smul
UNDERLINE

3
tputè un ottimo comando con molti comandi per molte attività diverse.
Drew Noakes,

Sto provando a qualcosa di simile a quello che sta facendo l'OP, ma con un motdfile. Come / dove definirei le variabili $bolde $normalin quell'istanza?
Matt,

74

Per applicare uno stile sulla tua stringa, puoi usare un comando come:

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

Spiegazione:

  • echo -e - L' -eopzione indica che verranno interpretate le stringhe con escape (backslashed)
  • \ 033 - la sequenza di escape rappresenta l'inizio / fine dello stile
  • m minuscola : indica la fine della sequenza
  • 1 - Attributo grassetto (vedi sotto per ulteriori informazioni)
  • [0m - ripristina tutti gli attributi, i colori, la formattazione, ecc.

I numeri interi possibili sono:

  • 0 - Stile normale
  • 1 - Grassetto
  • 2 - Dim
  • 3 - Corsivo
  • 4 - Sottolineato
  • 5 - Lampeggiante
  • 7 - Inverso
  • 8 - Invisibile

1
Buona spiegazione Stavo cercando ciò che la funzionalità [0moffre e questo lo spiega bene
Jeremy

Anche se dovrebbe essere\033[0m
Jeremy

1
3- corsivo , almeno in konsole
David Tabernero M.

Uno vorrebbe che Strikethrough fosse supportato su Ubuntu e su alcune delle altre piattaforme popolari.
Dark Star1

45

Suppongo che bash sia in esecuzione su un terminale compatibile con vt100 in cui l'utente non ha disattivato esplicitamente il supporto per la formattazione.

Innanzitutto, attiva il supporto per i caratteri speciali in echo, usando l' -eopzione. Successivamente, utilizzare la sequenza di escape ansi ESC[1m, come:

echo -e "\033[1mSome Text"

Maggiori informazioni sulle sequenze di escape ansi, ad esempio qui: ascii-table.com/ansi-escape-sequences-vt-100.php


Grazie. Ho trovato altri elenchi di sequenze di escape, ma quello a cui sei collegato è molto vasto!
JamesRat,

18
Non dimenticare di interrompere la formattazione in grassetto alla fine della stringa: echo -e "\033[1mSome Text\033[0m"altrimenti anche le seguenti righe del tuo terminale saranno in grassetto
mems

Questa soluzione funziona anche con PHP-CLI, un vantaggio rispetto ad altre soluzioni.
David

se hai difficoltà a ricordare \033che puoi usare \elikeecho -e "\e[1msome text\e[0m"
Felipe Alvarez,

1
La sequenza di fuga ottale è consentita in JS (JavaScript)
Pat-Laugh,

14

In teoria così:

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

In pratica, invece, può essere interpretato come colore "ad alta intensità".

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.