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.