Colorare bash: differenze tra le versioni

m
nessun oggetto della modifica
(esteso: colorare gli script)
mNessun oggetto della modifica
 
(20 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
<div align="left" style="width:50%; float:right; border: none; margin: 0.5em 0 0 1em; padding: 0.4em;">
{{Versioni compatibili}}
{| cellpadding=5 cellspacing=1 border=0
==Personalizzare il prompt==
|-
|align=left width=100% style="background-color:#f3f3ff; border:1px solid"|
'''{{{1}}}'''


{{{2}}}
Bash è un tipo, forse il più usato, di [[shell]] per Linux. Spesso però c'è la necessità di amministrare più macchine, anche solo all'interno di una rete casalinga. Possiamo riconoscerle certamente dall'[[hostname]], ma se vogliamo fare una cosa anche più carina oltre che utile, possiamo colorare il prompt. Per farlo basta modificare il file <code>~/.bashrc</code>. Al suo interno troveremo (se non le abbiamo cancellate in precedenza) delle righe più o meno cosi:
|}
 
<pre>
# Coloriamo bash
if [ "$PS1" ]; then
export PS1="\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;31m\]\h\[\033[1;0m\]:\w\$ "
fi
</pre>
 
La sintassi è abbastanza semplice, esploriamo invece i vari comandi:
 
<pre>
u = Il nostro nome utente
@ = il carattere @
[\033[1;32m\] = cambio il colore in verde
h = hostname
[\033[1;0m\] = colore di default
: = il carattere :
w = directory corrente
$ = $ se siamo user, # se siamo superuser
</pre>
 
Nell'esempio riportato sopra, che è una parte del mio <code>~/.bashrc</code>, possiamo usare bash con la bandiera italiana. Ovviamente potete personalizzarlo come volete, cambiare caratteri, modificare colori e quant'altro.
 
Per l'elenco di tutte le stringhe vedere la sezione ''STRINGHE DI PROMPT'' nel manuale di bash.
 
Debian utilizza un'altra variabile per distinguere l'hostname di un [[chroot]]:
<pre>
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
</pre>
questo è infatti solitamente l'inizio di PS1:
PS1='${debian_chroot:+($debian_chroot)}
 
Il file ''/etc/debian_chroot'' non esiste in modo predefinito ma si può creare inserendo un nome a scelta che andrà a sostituire il default.
 
 
==Usare i colori negli script==
 
Se si vogliono usare spesso i colori negli script bash è molto comodo definire delle variabili mnemoniche alle quali assegnare i codici di ogni colore. Questo può essere fatto ad esempio creando un file di nome <code>/usr/local/bin/colors</code>, con il seguente contenuto:
 
<pre>
#!/bin/bash
export WHITE="\e[1;37m"
export LGRAY="\e[0;37m"
export GRAY="\e[1;30m"
export BLACK="\e[0;30m"
export RED="\e[0;31m"
export LRED="\e[1;31m"
export GREEN="\e[0;32m"
export LGREEN="\e[1;32m"
export BROWN="\e[0;33m"
export YELLOW="\e[1;33m"
export BLUE="\e[0;34m"
export LBLUE="\e[1;34m"
export PURPLE="\e[0;35m"
export PINK="\e[1;35m"
export CYAN="\e[0;36m"
export LCYAN="\e[1;36m"
export Z="\e[0m"
</pre>
 
In questo modo non ci resta che fare un source del file <code>/usr/local/bin/colors</code> ogni qual volta vogliamo usare i colori. Per fare il source basta inserire:
 
<pre>
. colors
</pre>
 
in un punto dello script. A questo punto potremo colorare facilmente il nostro output in questo modo:
 
<pre>
echo -e "$RED *** $Z Attenzione: la dir $LGREEN documenti $Z sarà eliminata"
</pre>
 
che dà come risultato nel terminale:
 
<div style="padding: 10px; background-color: black;color: white;">
<code><font color="red"> *** </font>Attenzione: la dir <font color="#0FFF2F">documenti</font> sarà eliminata</code>
</div>
</div>
;Nota 1: bisogna usare l'opzione <code>-e</code> con echo per fargli interpretare correttamente i caratteri di escape.
;Nota 2: la variabile <code>$Z</code> ripristina il colore di default del terminale.
{{warningbox| I colori sono un caratteristica non POSIX di bash, quindi non usateli se volete fare script portabili}}
=== Colori ===
I parametri da cambiare sono la parte compresa tra le quadre e dopo l'escape ([\033): [1;5;33m\] <br>
Ogni gruppo di attributi è separato da un punto e virgola. <br>
''Attribute codes'' è per il primo gruppo. <br>
''Background color codes'' è per il secondo gruppo. <br>
''Text color codes'' è per il terzo gruppo.
I riferimenti si trovano con '''dircolors -p''' che mostra anche i colori associati ad ogni tipo di file usando '''ls --color'''
Attribute codes:
<pre>00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed</pre>
Text color codes:
<pre>30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white</pre>
Background color codes:
<pre>40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white</pre>
==Colorare l'output di ls==
Quando viene eseguito il comando "ls" avrete notato che i nomi delle directory vengono colorati in un modo (di default in blu) come anche i file in base alla loro estensione. Stesso discorso anche per i link, le pipe etc.<br/>
Ciò è dovuto alle seguenti righe presenti nel file <code>.bashrc</code> :
<pre>
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b .dircolors`"
..
</pre>
se avete installato Debian da un po' di tempo, oppure:
<pre>
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
..
</pre>
per le nuove installazioni. Cambiate il vostro file <code>.bashrc</code> in questo modo se si presenta nella prima forma ed eseguite un:
<pre>$. .bashrc</pre>
per rendere effettive le modifiche.
Ora, come si vede, ad occuparsi dei colori è <code>dircolors</code>. Si può visualizzare il database di <code>dircolors</code> con il comando:
<pre>$ dircolors -p</pre>
in cui sono presenti le varie associazioni oggetto/colore. Per modificarle eseguite:
<pre>$ dircolors -p > ~/.dircolors</pre>
con cui verrà creato nella vostra home un file nascosto chiamato <code>.dircolors</code> .
Adesso si può modificare questo file nel modo che si preferisce; ad esempio, per cambiare il colore delle directory da blu a giallo, si può modificare la riga corrispondente in questo modo:
<pre>
DIR 01;33 # directory
</pre>
oppure si può aggiungere un'estensione di file che non si trova in lista o inserire un background al testo.<br/>
I colori sono nella forma "stile_carattere;colore_testo;colore_sfondo". Per cui:
<pre>
DIR 01;33;44
</pre>
visualizzerà i nomi delle directory in grassetto, in giallo e su sfondo blu.<br/>
Le modiche vanno rese effettive chiudendo e riaprendo la finestra di emulatore del terminale oppure, se vi trovate in tty, con:
<pre>$ . ~/.bashrc</pre>
Per altri utenti, compreso [[root]], bisogna ripetere il procedimento.
{{Autori
|Autore = [[Utente:Bedo|Bedo]]
|Verificata_da =
:[[Utente:TheNoise|~ The_Noise]]
|Estesa_da =
:[[Utente:TheNoise|~ The_Noise]]
:[[Utente:S3v|S3v]] (colorare ls)
|Numero_revisori = 1
}}
[[Categoria:Bash]]
6 999

contributi