Come personalizzare-e-colorare-prompt-bash

Come personalizzare-e-colorare-prompt-bash

La maggior parte delle distribuzioni Linux configura il prompt di Bash in modo che assomigli a [email protected]:directory$

Ma puoi configurare il prompt di Bash in modo che contenga quello che ti piace e persino scegliere qualsiasi colore ti piaccia.

I passaggi di esempio qui sono stati eseguiti su Ubuntu 18.04 LTS. Il processo dovrebbe essere lo stesso su altre distribuzioni Linux, sebbene il prompt e le impostazioni predefinite di Bash nel file .bashrc possano essere leggermente diversi.

Questo è per terminali a 256 colori, che è da dove provengono gli escape \033[38;5;22m.

personalizzare-e-colorare-prompt-bash

personalizzare-e-colorare-prompt-bash

Dove viene memorizzata la variabile prompt

La configurazione del prompt di Bash è memorizzata nel file .bashrc dell’account utente, che si trova in ~/.bashrc . Quindi, se il tuo nome utente è Mario, il file si troverà in /home/Mario/.bashrc.

L’aspetto del prompt dei comandi di Bash è controllato dalla variabile ambientale $ PS1. Modificando questa variabile, si modifica l’aspetto del prompt.

Puoi vedere l’impostazione corrente di questa variabile con il comando:
Terminale
  • echo $PS1

personalizzare-e-colorare-prompt-bash

Decommentare il prompt di default:
Terminale
Aggiungere al seguente prompt il colore verde per gli utenti normali:
Terminale
Editare il file .bashrc per diventare amministratore; copiarlo da /etc/skel in caso non sia già presente:
Terminale
  • nano /root/.bashrc
Assegnare il prompt rosso per root:
Terminale
  • nano /root/.bashrc
Userò gedit come editor di testo di esempio, anche se potresti anche usare vi, emacs,  o qualsiasi altro editor di testo a tuo agio. Apri un Terminale ed esegui:
Terminale
  • gedit ~ / .bashrc

oppure

  • nano ~/.bashrc

oppure

  • vi ~/.bashrc
Scorri verso il basso fino alla sezione PS1=. La prima variabile sembra piuttosto complicata perché include informazioni sul colore: lo spiegheremo più avanti. La seconda variabile, senza informazioni sul colore, è la seguente:

${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$

personalizzare-e-colorare-prompt-bash.Prompt avanzati

Caricamento Stato della memoria per 256 colori

Questo non è nemmeno superare i limiti… altro che utilizzare sed per analizzare memoria e carico medio (usando l’opzione -u per il non-buffering), oppure dopo ogni comando l’arrangiamento per salvare la cronologia al proprio “HISTFILE”. Queste soluzioni sono estremamente utili quando si tratta di crash di shell o subshell, ed essenzialmente si tratta solo di far stampare a Bash variabili già note, rendendo l’operazione estremamente veloce rispetto al prompt con i comandi builtin.

Questo prompt è tratto dall’articolo di AskApache.com, BASH Power Prompt article, che fornisce maggiore approfondimenti. È particolarmente utile per coloro che vogliono comprendere i terminali a 256 colori, ncurses, termcap e terminfo.

Questo è per terminali a 256 colori, che è da dove provengono gli escape \033[38;5;22m.

Assegnare il prompt il colore rosso per root:

Terminale

personalizzare-e-colorare-prompt-bash

Prompt un po’ più elaborati

Un prompt verde e blu per utenti normali:

Terminale
  • PS1=’\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;37m\]’

Con il codice sopra avrete un prompt piacevole, colorato con un colore di testo bianco brillante.

La stringa sopra contiene le impostazioni colore per le sequenze di escape (inizio colorazione: \[\e[color\], fine colorazione: \[\e[m\]) e le informazioni segnaposto:

  • \u – Nome utente. Il prompt originale ha anche \h, che stampa il nome dell’host.
  • \w – Attuale percorso assoluto. Usa \W per l’attuale percorso relativo percorso.
  • \$ – Il carattere di prompt (es.# per root,$ per gli utenti normali).

L’ultimo sequenza di colore, \[\e[1;37m\], non è chiusa, in modo che il testo rimanente (tutto quello che è scritto nel terminale, l’output dei programmi e così via) saranno in quel colore (bianco brillante). Può essere auspicabile cambiare questo colore, o cancellare l’ultima sequenza di escape in modo da lasciare l’attuale output con colori inalterati.

Un prompt rosso e blu per root:

Terminale
  • PS1=’\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;31m\]\$ \[\e[m\]\[\e[0;32m\]’

Questo darà una denominazione rossa con il testo della console verde.

Una volta effettuate le modifiche al bashrc, per applicare le modifiche.:

Terminale
  • source ~/.bashrc

Prompt avanzati e lista colori

Caricamento Stato della memoria per 256 colori

personalizzare-e-colorare-prompt-bash

personalizzare-e-colorare-prompt-bash.Questo non è nemmeno superare i limiti… altro che utilizzare sed per analizzare memoria e carico medio (usando l’opzione -u per il non-buffering), oppure l’arrangiamento per salvare la cronologia al proprio “HISTFILE” dopo ogni comando. Queste soluzioni sono estremamente utili quando si tratta di crash di shell o subshell,  essenzialmente si tratta di far stampare a Bash variabili già note, rendendo l’operazione estremamente veloce rispetto al prompt con i comandi builtin.

Questo prompt è tratto dall’articolo di AskApache.com, BASH Power Prompt article, che fornisce maggiore approfondimenti. È particolarmente utile per coloro che vogliono comprendere i terminali a 256 colori, ncurses, termcap e terminfo.

Questo è per terminali a 256 colori, che è da dove provengono gli escape \033[38;5;22m:

Terminale
  • PS1=’\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;31m\]\$ \[\e[m\]\[\e[0;32m\]’

Questo darà una denominazione rossa con il testo della console verde.

Una volta effettuate le modifiche al bashrc, per applicare le modifiche:

Terminale
  • source ~/.bashrc

Lista di colori per il prompt e Bash

Aggiungere questo al file di Bash per definire i colori per il prompt e i comandi:
  1. txtblk=’\e[0;30m’ # Nero – Regular
  2. txtred=’\e[0;31m’ # Rosso
  3. txtgrn=’\e[0;32m’ # Verde
  4. txtylw=’\e[0;33m’ # Giallo
  5. txtblu=’\e[0;34m’ # Blu
  6. txtpur=’\e[0;35m’ # Viola
  7. txtcyn=’\e[0;36m’ # Ciano
  8. txtwht=’\e[0;37m’ # BiancoLista di colori per il prompt e Bash
  9. bldblk=’\e[1;30m’ # Nero – Bold
  10. bldred=’\e[1;31m’ # Rosso
  11. bldgrn=’\e[1;32m’ # Verde
  12. bldylw=’\e[1;33m’ # Giallo
  13. bldblu=’\e[1;34m’ # Blu
  14. bldpur=’\e[1;35m’ # Viola
  15. bldcyn=’\e[1;36m’ # Ciano
  16. bldwht=’\e[1;37m’ # Bianco
  17. unkblk=’\e[4;30m’ # Nero – Underline
  18. undred=’\e[4;31m’ # Rosso
  19. undgrn=’\e[4;32m’ # Verde
  20. undylw=’\e[4;33m’ # Giallo
  21. undblu=’\e[4;34m’ # Blu
  22. undpur=’\e[4;35m’ # Viola
  23. undcyn=’\e[4;36m’ # Ciano
  24. undwht=’\e[4;37m’ # Bianco
  25. bakblk=’\e[40m’ # Nero – Background
  26. bakred=’\e[41m’ # Rosso
  27. badgrn=’\e[42m’ # Verde
  28. bakylw=’\e[43m’ # Giallo
  29. bakblu=’\e[44m’ # Blu
  30. bakpur=’\e[45m’ # Viola
  31. bakcyn=’\e[46m’ # Ciano
  32. bakwht=’\e[47m’ # Bianco
  33. txtrst=’\e[0m’ # Text Reset
O se preferite nomi di colori o si vogliono colori ad alta intensità:
  • # Reset
    Color_Off=’\e[0m’ # Text Reset
  • # Regular Colors
    Black=’\e[0;30m’ # Nero
    Red=’\e[0;31m’ # Rosso
    Green=’\e[0;32m’ # Verde
    Yellow=’\e[0;33m’ # Giallo
    Blue=’\e[0;34m’ # Blu
    Purple=’\e[0;35m’ # Viola
    Cyan=’\e[0;36m’ # Ciano
    White=’\e[0;37m’ # Bianco
  • # Bold
    BBlack=’\e[1;30m’ # Nero
    BRed=’\e[1;31m’ # Rosso
    BGreen=’\e[1;32m’ # Verde
    BYellow=’\e[1;33m’ # Giallo
    BBlue=’\e[1;34m’ # Blu
    BPurple=’\e[1;35m’ # Viola
    BCyan=’\e[1;36m’ # Ciano
    BWhite=’\e[1;37m’ # Bianco
  • # Underline
    UBlack=’\e[4;30m’ # Nero
    URed=’\e[4;31m’ # Rosso
    UGreen=’\e[4;32m’ # Verde
    UYellow=’\e[4;33m’ # Giallo
    UBlue=’\e[4;34m’ # Blu
    UPurple=’\e[4;35m’ # Viola
    UCyan=’\e[4;36m’ # Ciano
    UWhite=’\e[4;37m’ # Bianco
  • # Background
    On_Black=’\e[40m’ # Nero
    On_Red=’\e[41m’ # Rosso
    On_Green=’\e[42m’ # Verde
    On_Yellow=’\e[43m’ # Giallo
    On_Blue=’\e[44m’ # Blu
    On_Purple=’\e[45m’ # Purple
    On_Cyan=’\e[46m’ # Ciano
    On_White=’\e[47m’ # Bianco
  • # High Intensty
    IBlack=’\e[0;90m’ # Nero
    IRed=’\e[0;91m’ # Rosso
    IGreen=’\e[0;92m’ # Verde
    IYellow=’\e[0;93m’ # Giallo
    IBlue=’\e[0;94m’ # Blu
    IPurple=’\e[0;95m’ # Viola
    ICyan=’\e[0;96m’ # Ciano
    IWhite=’\e[0;97m’ # Bianco
  • # Bold High Intensty
    BIBlack=’\e[1;90m’ # Nero
    BIRed=’\e[1;91m’ # Rosso
    BIGreen=’\e[1;92m’ # Verde
    BIYellow=’\e[1;93m’ # Giallo
    BIBlue=’\e[1;94m’ # Blu
    BIPurple=’\e[1;95m’ # Viola
    BICyan=’\e[1;96m’ # Ciano
    BIWhite=’\e[1;97m’ # Bianco
  • # High Intensty backgrounds
    On_IBlack=’\e[0;100m’ # Nero
    On_IRed=’\e[0;101m’ # Rosso
    On_IGreen=’\e[0;102m’ # Verde
    On_IYellow=’\e[0;103m’ # Giallo
    On_IBlue=’\e[0;104m’ # Blu
    On_IPurple=’\e[10;95m’ # Viola
    On_ICyan=’\e[0;106m’ # Ciano
    On_IWhite=’\e[0;107m’ # Bianco
Per utilizzare i comandi dal proprio ambiente shell:
  • $ echo -e “${txtblu}test”
    test
  • $ echo -e “${bldblu}test”
    test
  • $ echo -e “${undblu}test”
    test
  • $ echo -e “${bakblu}test”
    test
Per utilizzare nei prompt (notare le virgolette e la barra \[ \] usati dalla shell per calcolare la lunghezza corretta):
Terminale
  • PS1=”\[$txtblu\]foo\[$txtred\] bar\[$txtrst\] baz : “

personalizzare-e-colorare-prompt-bash.Posizionamento del cursore

La sequenza che segue imposta la posizione del cursore:

Terminale
  • PS1=”\[\033[<row>;<column>f\]

La posizione del cursore può essere salvata utilizzando:

Terminale
  • PS1=”\[\033[s\]

PS1=”\[\033[s\]

Per ripristinare una posizione, utilizzare la seguente sequenza:

Terminale
  • PS1=”\[\033[u\]

L’esempio seguente utilizza queste sequenze per visualizzare l’ora in alto a destra:

Terminale
  • PS1=”>\[\033[s\]\[\033[1;\$((COLUMNS-4))f\]\$(date +%H:%M)\[\033[u\]”

La variabile d’ambiente COLUMNS contiene il numero di colonne del terminale. L’esempio precedente sottrae 4 dal proprio valore per giustificare i cinque caratteri dell’output largo della “data” sul bordo destro.

Visualizzazione valore di ritorno

ATTENZIONE

Questo è sembrato non essere esente da bug, vedere la voce aggiunta alla pagina di discussione. Potete aggiungere un \n dopo la faccina per evitare calcoli sbagliati sulla lunghezza della linea.

Se desiderate ritornare al valore del ultimo comando eseguito aggiungete il seguente comando:

Terminale
  • PROMPT_COMMAND=’RET=$?; if [[ $RET -eq 0 ]]; then echo -ne “\033[0;32m$RET\033[0m ;)”; else echo -ne “\033[0;31m$RET\033[0m ;(“; fi; echo -n ” “‘

E sarà simile a questo:

  1. 0 😉 [email protected] ~/ $ true
  2. 0 😉 [email protected] ~/ $ false
  3. 1 ;( [email protected] ~/ $

Zero è verde e non di colore rosso. C’è anche l’indicazione smiley (sostituirlo con quello che preferite); così il prompt sorriderà se l’ultima operazione ha avuto successo.

Visualizzazione del valore di ritorno avanzata

Se volete colori, dovete impostare i valori $RED e $GREEN:

  1. RED=’\e[0;31m’
  2. GREEN=’\e[0;32m’

Dovete specificare questi valori nei file di configurazione di Bash:

  1. #return value visualisation
    PROMPT_COMMAND=’RET=$?;’
    RET_VALUE=’$(echo $RET)’ #Ret value not colorized – you can modify it.
    RET_SMILEY=’$(if [[ $RET = 0 ]]; then echo -ne “\[$GREEN\];)”; else echo -ne “\[$RED\];(“; fi;)’

Quindi possiamo utilizzare le variabili $RET_VALUE e $RET_SMILEY nel prompt. Importante usare le virgolette:

#prompt
PS1=”$RET_VALUE $RET_SMILEY : ”

Questo darà un prompt di base:

  • 0 😉 : true
  • 0 😉 : false
  • 1 ;( :

Ma probabilmente si desidera utilizzare $RET_VALUE or $RET_SMILEY nel proprio prompt, così:

Terminale
  • PS1=”\[$WHITE\]$RET_VALUE $RET_SMILEY \[$BLUE\]\u\[$RED\]@\[$EBLUE\]\h\[$WHITE\] \W \[$ERED\]\\$\[$EWHITE\] “

personalizzare-e-colorare-prompt-bash.Prompt di KitchM

Questi prompt offrono maggiore chiarezza visiva e un testo lampeggiante. Da notare che l’uso del colore rosso nel prompt dell’utente root potrebbe dare luogo a indicazioni di attenzione.

Primo, cambiare lo sfondo di default nelle preferenze del terminale (In questo esempio si usa iul terminal di Xfce) a #D2D2D2, ed il colore del testo a #000000. I font sono impostati come DejaVu Sans Mono Book 12. Il colore del cursore è #00AA00, e il colore dell’attività dei tab è #AF0000.

Secondo, in ~/.bashrc dopo la riga PS1=, inserire una nuova riga con il seguente:

Terminale
  • PS1=’\e[1;33;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;34m[dir.= \w] \# > \e[0;0m’

personalizzare-e-colorare-prompt-bash

E poi mettere un # davanti alla prima riga PS1.

Terzo, per l’utente root, modificare il file /root/.bashrc nello stesso modo per includere:

Terminale
  • PS1=’\e[1;31;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;31m[dir.= \w] \# > \e[0;0m’

Non dimenticare di commentare la riga vecchia.

Da notare che i colori di sfondo renderanno più confortevole la lettura, ed i colori del testo manterranno le cose un po’ più “interessanti”. C’è un ampio margine di manovra per personalizzarli a piacere, in modo semplice con l’uso di colori.

Impostazione titolo finestra

Xterm e molti altri emulatori di terminale (PuTTY incluso) consentono di impostare il titolo della finestra utilizzando speciali sequenze di escape. Si possono impostare le variabili ${XTERM_TITLE} come segue, poi inserirle all’inizio del prompt per impostare il titolo di xterm (se disponibile) su [email protected]@hostname:

Il testo tra 0; e \a può essere impostato come si preferisce, per esempio:

Terminale
  • export PS1=’\[\e]0;Welcome to ArchLinux\a\]\$>> ‘

imposta il titolo della finestra con “Benvenuto su ArchLinux” e mostra questo messaggio semplice:

  • $>> _

Colori diversi per l’immissione di testo e output su console

Se il colore del testo non viene azzerato alla fine del Promt, sia il testo inserito che il testo della console rimarranno dello stesso colore. Se volete modificare il testo in un speciale colore, ma usate ancora il colore predefinito per l’output del comando, dovete riprisinare il colore dopo aver premuto invio, ma prima di eseguire qualsiasi comando. Potete farlo tramite l’ installayione di una DEBUG trap nel file  ~/.bashrc, in questo modo:

Terminale
  • trap ‘echo -ne “\e[0m”‘ DEBUG

Ripristino del file originale /etc/bash.bashrc file

Se vi pentite di aver modificato il file /etc/bash.bashrc, potete sempre ripristinare il file originale di Arch /etc/bash.bashrc e rimuovere il file /etc/DIR_COLORS. Da notare che non c’è un file “ufficiale” bash.bashrc: ogni distribuzione ha il suo. Ecco la copia esatta del file /etc/bash.bashrc originale di Arch.

/etc/bash.bashrc:

#
# /etc/bash.bashrc
#

# If not running interactively, don’t do anything
[[ $- != *i* ]] && return

PS1='[\[email protected]\h \W]\$ ‘
PS2=’> ‘
PS3=’> ‘
PS4=’+ ‘

case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }’printf “\033]0;%[email protected]%s:%s\007” “${USER}” “${HOSTNAME%%.*}” “${PWD/#$HOME/~}”‘

;;
screen)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }’printf “\033_%[email protected]%s:%s\033\\” “${USER}” “${HOSTNAME%%.*}” “${PWD/#$HOME/~}”‘
;;
esac

[ -r /etc/bash_completion ] && . /etc/bash_completion

Guarad anche bash-esempio-ciao-mondo

Grazie! per l’utilizzo della Guida di Linuxiano.

Trovi questo tutorial utile? Condividi con i tuoi amici per tenerlo in vita.
Sii il primo a commentare, apprezzo i tuoi suggerimenti. Per ulteriori domande potete commentare qui sotto.