Cambiare il colore del testo e lo sfondo del terminale?

51

Posso cambiare il colore attraverso le preferenze, ma come posso cambiare il colore dello sfondo e il colore del testo del terminale attraverso la riga di comando?

    
posta TechJhola 09.12.2014 - 06:11

4 risposte

33

Su alcuni terminali compatibili XTerm / ANSI (come xterm e gnome-terminal ), puoi impostare i colori usando una tavolozza più grande della tavolozza 8/16 colori predefinita (ad esempio usando un 88 colori, 256- colori o tavolozza 16777216-colori (RGB); entrambi xterm e gnome-terminal supportano sia la tavolozza a 256 colori sia quella a colori 16777216 (RGB)); sia chiaro che la shell potrebbe sovrascriverla (questo è il caso ad es. per zsh ).

Ecco uno script per elencare i colori nella tavolozza a 256 colori insieme al loro codice colore ANSI nei terminali compatibili XTerm / ANSI con un supporto della tavolozza a 256 colori:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

A seconda se vuoi applicare il colore al primo piano o allo sfondo, usa un valore <fg_bg> di 38 o 48 (rispettivamente) nel seguente comando:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

Ad esempio, per impostare il colore di primo piano ( <fg_bg> = 38 ) su rosso ( <ANSI_color_code> = 196 ) e il colore di sfondo ( <fg_bg> = 48 ) su nero ( <ANSI_color_code> = 0 ):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

È necessario ridisegnare il prompt utilizzando printf '\e[K' affinché il colore dello sfondo si applichi all'intera linea e affinché il colore di primo piano si applichi al cursore:

La stessa cosa può essere ottenuta usando i valori RGB invece dei codici colore ANSI in un terminale compatibile; a seconda che si desideri applicare il colore al primo piano o allo sfondo, utilizzare un valore <fg_bg> di 38 o 48 (rispettivamente) nel seguente comando:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

Ad esempio, per impostare il colore di primo piano ( <fg_bg> = 38 ) su rosso ( <R> = 255 , <G> = 0 , <B> = 0 ) e lo sfondo colore ( <fg_bg> = 48 ) a nero ( <R> = 0 , <G> = 0 , <B> = 0 ):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

Ancora una volta, è necessario ridisegnare il prompt utilizzando printf '\e[K' affinché il colore dello sfondo si applichi all'intera linea e affinché il colore di primo piano si applichi al cursore:

Utilizzando entrambi i metodi, puoi utilizzare printf '\e[0m' per reimpostare tutti gli attributi:

    
risposta data kos 05.10.2015 - 14:00
27

Cambia i colori in modo casuale

Se si intende cambiare i colori in modo casuale :

Puoi utilizzare il comando setterm :

setterm -term linux -back <background_colour> -fore <text_color> -clear

dai colori, puoi scegliere tra (anteriore e sfondo):

black|blue|green|cyan|red|magenta|yellow|white|default

per ulteriori opzioni:

setterm -help

Modifica le impostazioni del profilo (colore)

In 14.04, non ho trovato un'opzione per usare dconf per impostare i colori o il terminale. Puoi tuttavia utilizzare gconftool

  • Devi prima ottenere il nome del tuo profilo:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • Quindi, per impostare i colori del testo del tuo profilo:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    ad esempio per impostare il colore del testo su bianco

    Lo stesso con il colore di sfondo:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    ad esempio per impostare il colore di sfondo su nero

In alternativa, per impostare il nome del / i colore / i, puoi semplicemente utilizzare white o green , dalla stessa tavolozza del comando setterm, ad esempio:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
    
risposta data Jacob Vlijm 09.12.2014 - 07:50
27

Informazioni come trovate su questa pagina , esclusa la colonna di anteprima:

Le sequenze sono composte dal carattere Escape (spesso rappresentato da " ^[ " o " <Esc> ") seguito da altri caratteri: " <Esc>[FCm " (dove FC è uno dei numeri nel puntato lista sotto).

In bash , il codice Esc può essere uno dei seguenti:

  1. \e
  2. 3 (ottale)
  3. \x1B (esadecimale)

Nota 1: La sequenza " \e[0m " rimuove tutti gli attributi (formattazione e colori). Può essere una buona idea aggiungerlo alla fine di ogni testo colorato.

Nota 2: I colori di primo piano e di sfondo possono variare a seconda della configurazione del terminale e non tutti i colori sono supportati .

Set / Reset

  • 0 : reimposta / rimuovi tutti gli attributi modificatore, foreground e background: echo -e "\e[0mNormal Text"
  • 1 : Grassetto / Luminoso: echo -e "Normal \e[1mBold"
  • 2 : Dim: echo -e "Normal \e[2mDim"
  • 4 : sottolineato: echo -e "Normal \e[4mUnderlined"
  • 5 : Blink (non funziona nella maggior parte dei terminali tranne XTerm): echo -e "Normal \e[5mBlink"
  • 7 : Reverse / Invert: echo -e "Normal \e[7minverted"
  • 8 : nascosto (utile per informazioni sensibili): echo -e "Normal \e[8mHidden Input"
  • 21 : ripristina / Rimuovi grassetto / chiaro: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22 : Reimposta / Rimuovi dim: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24 : reimposta / rimuovi sottolineatura: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25 : Reset / Rimuovi lampeggia: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27 : Reimposta / Rimuovi inversa / invertita: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28 : reimposta / rimuovi nascosto: echo -e "Normal \e[8mHidden \e[28mNormal"

primo piano

  • 39 : predefinito (di solito verde, bianco o grigio chiaro): echo -e "Default \e[39mDefault"
  • 30 : nero: echo -e "Default \e[30mBlack" (meglio combinato con un colore di sfondo: echo -e "Default \e[30;107mBlack on white" )
  • 31 : rosso (non utilizzare con sfondo verde)
  • 32 : verde
  • 33 : giallo
  • 34 : blu
  • 35 : Magenta / Viola
  • 36 : ciano
  • 37 : grigio chiaro
  • 90 : grigio scuro
  • 91 : rosso chiaro
  • 92 : verde chiaro
  • 93 : Giallo chiaro
  • 94 : blu chiaro
  • 95 : Light Magenta / Pink
  • 96 : ciano chiaro
  • 97 : bianco

Sfondo

  • 49 : colore di sfondo predefinito (solitamente nero o blu)
  • 40 : nero
  • 41 : rosso
  • 42 : verde
  • 43 : giallo
  • 44 : blu
  • 45 : Magenta / Viola
  • 46 : ciano
  • 47 : grigio chiaro (non utilizzare con il bianco in primo piano)
  • 100 : Grigio scuro (non usare con il nero in primo piano)
  • 101 : rosso chiaro
  • 102 : verde chiaro (non utilizzare con il bianco in primo piano)
  • 103 : Giallo chiaro (non utilizzare con il bianco in primo piano)
  • 104 : blu chiaro (non utilizzare con in primo piano giallo chiaro)
  • 105 : Light Magenta / Pink (non usare con la luce in primo piano)
  • 106 : ciano chiaro (non usare con bianco in primo piano)
  • 107 : bianco (non utilizzare con luci in primo piano)

Per impostare contemporaneamente i colori di primo piano e di sfondo, utilizza la forma echo -e "\e[S;FG;BGm" . Ad esempio: echo -e "\e[1;97;41m" (grassetto in primo piano bianco su sfondo rosso)

Per le opzioni a 256 colori, vedere la pagina di origine.

    
risposta data Agi Hammerthief 09.12.2014 - 14:43
5

I vari codici colore utilizzati per ottenere l'output colorato possono anche essere utilizzati per ottenere sfondi colorati :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

Pertanto, il seguente comando gira il mio sfondo in rosso:

$ echo -e '\e[0;41m'

A seconda della shell, dell'emulatore di terminale, ecc., potresti non aver bisogno di -e .

    
risposta data muru 09.12.2014 - 08:17

Leggi altre domande sui tag