6 999
contributi
(esteso: colorare gli script) |
S3v (discussione | contributi) mNessun oggetto della modifica |
||
(20 versioni intermedie di 8 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | |||
==Personalizzare il prompt== | |||
{ | 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]] |
contributi