Esiste una pagina di manuale per l'output di shell colorato?


23

Sai, quell'output colorato realizzato da sequenze di caratteri speciali, ad esempio:

echo -e "\e[34m Hello\n \e[0m"

Questo produrrà la parola "Ciao" colorata in blu. Per fare questo ho dovuto cercare sul web, ed è difficile, perché fonti diverse possono dire qualcosa di diverso. Ho pensato che dovevano esserci dei manuali, ma non sono riuscito a trovarli. Anche con apropos coloro qualcosa di simile. Quindi, la domanda è: dove posso trovare manuali affidabili?


2
Stai cercando documentazione sui codici di escape ANSI. (Tendo a usare la pagina di Wikipedia quando ho bisogno di cercarne una.)
chepner

Nota che non devi necessariamente conoscere quelle sequenze di escape. Diverse shell (almeno tcsh, zsh, fish) hanno il supporto incorporato per l'output a colori senza dover scrivere esplicitamente quelle sequenze.
Stéphane Chazelas,

Risposte:


27

Ci sono troppe fonti di informazioni da elencare in questa pagina:

  • Il comando echo -eutilizza un'estensione per il rendering \ecome ASCII 27 (ottale 33 o "\ 033"). Il modo portatile per stampare questi usi printf(POSIX). Confronta con lo standard echo(POSIX).
  • Il tuo esempio può essere riscritto come

    printf "\033[34m Hello\n \033[0m"

  • lo standard per le fughe di colore è ECMA-48 (Funzioni di controllo per set di caratteri codificati).
  • In ECMA-48, 8.3.117 SGR - SELECT RENDITION GRAPHIC elenca le sequenze di controllo per impostare 8 colori di primo piano e 8 di sfondo.
  • Elenca anche i codici 39/49 "colore di visualizzazione predefinito (definito dall'implementazione)" e 38/48 "riservati per la futura standardizzazione; intesi per impostare il colore di primo piano dei caratteri come specificato nella norma ISO 8613-6 [Raccomandazione CCITT T.416]". Cioè, vi è una raccomandazione di un'altra organizzazione ma non è stata (finora, dopo 24 anni) parte dello standard.
  • leggendolo da vicino, potresti notare che lo standard è vago in molti punti, consentendo diverse interpretazioni. Descrive la sintassi di queste sequenze di controllo ma non descrive il loro comportamento . Per questo, devi andare alla documentazione per i rispettivi terminali.
  • la documentazione per xterm si trova in XTerm Control Sequences , che assume una familiarità con la documentazione DEC disponibile su http://vt100.net
  • per altri terminali, le loro pagine di manuale possono enumerare i controlli (come fatto per la console Linux in console_codes ).
  • altri terminali si documentano come "xterm"; per la discussione vedere le domande frequenti su xterm Confronto delle versioni, contando i controlli . Fortunatamente, i controlli del colore sono per lo più compatibili (ma vedi le FAQ di ncurses Il mio terminale mostra alcuni spazi non colorati ).
  • puoi anche leggere le pagine del manuale per tput, che ti consente di usare le terminfofunzionalità in uno script di shell. Il tuo esempio potrebbe essere riscritto come

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • alcune fonti come Bash Prompt HOWTO e Advanced Bash-Scripting Guide menzionano il colore, ma (anche queste) di norma hanno lacune e omissioni e non sono utili rispetto all'ECMA-48.

  • la maggior parte delle altre fonti che troverai con una copia di ricerca web da altre fonti (come quelle citate), ecc., e di norma prestano poca attenzione allo standard reale.

La sezione pertinente in ECMA-48 sembra essere 8.3.117 - "SGR - SELEZIONA RENDIZIONE GRAFICA". Ha le uniche menzioni della parola "blu", e i codici trovati lì funzionano almeno nel mio XTerm.
l0b0

si - aggiungerò un chiarimento.
Thomas Dickey,

2
È davvero un'ottima risposta - vorrei che tutte le risposte fossero come le vostre
Sergio

1
xterm supporta anche la modalità 256 colori, presumibilmente questo è documentato in uno dei manuali sopra.
sendmoreinfo,

Vedi wynnnetherland.com/journal/… per un mucchio di informazioni utili incluso il pacchetto grc che può fare ogni sorta di colorazione delle cose con l'output del comando.
Joe,
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.