GNU/Linux >> Linux Esercitazione >  >> Linux

Le sequenze di escape del colore terminale sono definite ovunque per Bash?

Ho usato ogni tanto i colori negli script di Bash (principalmente su CentOS), ma per rendere il loro utilizzo più comodo finisco per ridefinire variabili ai valori di colore:

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

o anche con tput :

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

Ho esplorato il /etc/rc.d/init.d directory ma non ho trovato nulla relativo alle definizioni dei colori.

Esiste già una definizione del genere? In caso contrario, li metterei in un file in /etc/rc.d/init.d per dire, e includerlo nei miei script, un po' come con /etc/rc.d/init.d/functions

Risposta accettata:

Ci sono diversi aspetti in gioco in ciò che chiedi.

Innanzitutto, bash non definisce i colori. In effetti bash non ha assolutamente idea dell'esistenza dei colori. Tutto quello che sa è che gli hai detto di produrre i caratteri \033[0;36m . Il tuo emulatore di terminale (xterm, gnome-terminal, qualunque cosa) riceve questi caratteri e capisce "Ho bisogno di iniziare l'output in cyan".

Quindi è il tuo emulatore di terminale che comprende i colori. L'emulatore di terminale comprende che \033[0;36m è ciano, ma un altro emulatore di terminale potrebbe utilizzare un set di caratteri completamente diverso per ciano (sebbene nessun emulatore di terminale sano osserverebbe lo standard e lo farebbe). Questo è il motivo di tput . Quando esegui tput setaf 6 , tput cercherà i codici di escape del tuo terminale per il colore 6 (ciano) e produrrà quel codice di escape.

Ora torna a bash. Come avrai notato, quando mi riferivo al colore ciano, ho usato \033[0;36m , non \[\033[0;36m\] . Mancano le parentesi quadre. Lo scopo delle parentesi quadre è che quando si utilizzano i codici di escape (colori) nel prompt, bash deve sapere quali caratteri non sono stampabili (larghezza zero, in realtà non mostra nulla). Quindi racchiudi i caratteri non stampabili in \[ \] . Se rimuovi questi caratteri, all'inizio potrebbe sembrare che tutto funzioni bene, ma inizierai a imbatterti in ogni sorta di stranezza quando il tuo comando supera la larghezza del terminale. Questo perché durante la digitazione, bash deve sapere quando il comando dovrebbe andare a capo alla riga successiva. Per fare ciò, calcola la larghezza del prompt, quindi la larghezza di quanto hai digitato.

Un'altra nota, su tput . CYAN="\[\033[0;36m\]" è non la stessa cosa di CYAN="$(tput setaf 6)" . Come abbiamo appena discusso, le parentesi quadre sono rilevanti per bash e tput produrrà solo i codici di escape del terminale.

Correlati:Linux - Linux è un Unix?

Poiché le parentesi quadre di solito sono rilevanti solo nel prompt, se stai usando i colori nell'output di uno script o qualcosa del genere, non dovresti usarli. Ciò significa che se hai intenzione di utilizzare i colori per più dei prompt, devi definire più variabili. Uno con parentesi quadre per l'utilizzo nel prompt e uno senza per tutto il resto. Sebbene tu possa semplicemente aggiungere manualmente le parentesi quadre ogni volta che fai riferimento a un colore nel prompt.

Per farla breve, probabilmente vorrai definire qualcosa come:

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Linux
  1. Suggerimenti Bash per tutti i giorni dalla riga di comando

  2. Lo scopo della parola chiave "do" in Bash For Loops?

  3. Ssh:imposta i colori del terminale della macchina locale per utilizzare quelli della macchina in cui Ssh?

  4. Quali sono i separatori di parole Readline?

  5. Tput:nessun valore per $term e nessun -t specificato?

20 strumenti di produttività per il terminale Linux

Un'introduzione all'emulatore di terminale DomTerm per Linux

Vantaggio dell'obiettivo per sfuggire alle sequenze su Tput?

Il ciclo Bash FOR spiegato e semplificato

3 lettori multimediali musicali per il terminale Debian 10

I 30 migliori emulatori di terminale Linux e editor Bash