Disclaimer :
La versione originale di questo articolo è stata pubblicata da IBM
developerWorks ed è di proprietà di Westtech Information Services. Questo
documento è una versione aggiornata dell'articolo originale, e contiene
numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.
|
Prompt magic
1.
Migliorare il prompt di sistema
Come tutti gli utenti Linux/Unix, noi passiamo un bel po' di tempo lavorando
nella shell, e in molti casi, questo è quello che ci ritroviamo:
Codice 1.1: Il prompt di un utente normale |
bash-2.04$
|
Se vi capita di diventare root, sarete autorizzati ad utilizzare la versione
speciale di questo prompt:
Codice 1.2: Il prompt di root |
bash-2.04#
|
Questi prompt non sono esattamente carini. Non meraviglia che parecchie
distribuzioni Linux abbiano aggiornato i loro con colori e informazioni
addizionali. Tuttavia, anche se vi capita di avere installato una di queste
distribuzioni moderne con un prompt carino e colorato, questo potrebbe non
essere adatto per voi.
Potreste, ad esempio, aggiungere qualche colore, o inserire o eliminare
informazioni. Non è assolutamente difficile progettare il proprio prompt
migliorato e colorato partendo da zero.
Concetti base del Prompt
Utilizzando la bash, si può impostare il prompt cambiando il valore della
variabile d'ambiente PS1, come segue:
Codice 1.3: cambiando la variabile d'ambiente |
$ export PS1="> "
>
|
I cambiamenti sono immediati, e possono essere resi permanenti inserendo la
definizione export nel proprio file ~/.bashrc. La
variabile PS1 può contenere qualsiasi stringa di testo che preferite:
Codice 1.4: Un prompt personalizzato |
$ export PS1="Il mio super prompt > "
Il mio super prompt >
|
Anche se interessante, non è esattamente utile avere un prompt che contiene
solo un mucchio di stringhe statiche di testo. Molti prompt personalizzati
contengono informazioni sull'utente corrente, la cartella di lavoro o il nome
del pc. Questi frammenti d'informazione possono aiutarvi a navigare meglio
nell'universo della shell. per esempio, il prompt seguente mostrerà il nome
dell'utente e della macchina:
Codice 1.5: Un prompt molto più utile |
$ export PS1="\u@\H > "
drobbins@freebox >
|
Questo prompt può essere specialmente utile per le persone che accedono a
varie macchine con account con nomi diversi, serve per ricordarsi sempre su
quale pc stiamo lavorando e di quali privilegi disponiamo.
Negli esempi precedenti, abbiamo chiesto alla bash di inserire il nome
utente e quello della macchina nel prompt, utilizzando delle sequenze speciali
di caratteri che vengono sostituiti con valori specifici quando appaiono
nella variabile PS1. Abbiamo utilizzato la sequenza \u (per
il nome utente) e \H (per il nome del pc). Qui sotto c'è una lista
completa di tutte le sequenze speciali di caratteri che la bash riconosce
(questa può essere reperita anche nel man della bash sotto la sezione
"PROMPTING"):
| Sequenza |
Descrizione |
| \a |
Il carattere ASCII del beep di sistema (potreste anche scrivere
\007)
|
| \d |
Data nel formato "Mer Set 06" |
| \e |
Carattere ASCII di escape (potreste anche scrivere \033) |
| \h |
Prima parte del nome della macchina (come "mybox") |
| \H |
Nome completo della macchina (come "mybox.mydomain.com") |
| \j |
Il numero dei processi che avete sospeso in questa shell premendo ^Z
|
| \l |
Il nome del terminale della shell (come "ttyp4") |
| \n |
Nuova riga |
| \r |
Ritorno a capo |
| \s |
Il nome dell'eseguibile della shell (come "bash") |
| \t |
L'ora nel formato 24 ore (come "23:01:01") |
| \T |
L'ora nel formato 12 ore (come "11:01:01") |
| \@ |
L'ora nel formato 12 ore con am/pm |
| \u |
Il vostro nome utente |
| \v |
La versione di bash (come 2.04) |
| \V |
La versione di bash incluso il livello di patch |
| \w |
La cartella di lavoro corrente(come /home/drobbins) |
| \W |
Il "nome base" della cartella di lavoro corrente (come "drobbins") |
| \! |
La posizione corrente del comando nella memoria dello storico di bash |
| \# |
Numero comandi (questo conta il numero dei comandi digitati nel prompt)
|
| \\$ |
Se non siete root, inserisce una $; se siete root, inserisce una
#. Se delimitate la stringa con ' invece di ",
potete utilizzare una singola barra rovesciata invece di 2
|
| \xxx |
Inserisce un carattere ASCII formato da tre cifre xxx (inoltre rimpiazza
le cifre inutilizzate con degli zero, come ad esempio \007)
|
| \\ |
La barra rovesciata |
| \[ |
Questa sequenza può apparire prima di una sequenza di caratteri che non
servono per fare spostare il cursore ma, per esempio, per far cambiare
colore al testo e allo sfondo. Questo serve alla bash per interpretare
correttamente le parole o comandi forniti. (Sequenze di escape)
|
| \] |
Questa sequenza appare dopo una sequenza di caratteri come la precedente
che non generano output.
|
Questa è la lista di tutte le sequenze di caratteri speciali della bash. E'
consigliabile "giocherellare" con questi comandi per prenderne dimestichezza
e capirne il funzionamento. Ora, dopo un po' di prove, è giunto il momento di
aggiungere un po' di colore.
Colorazione
L'aggiunta dei colori è molto semplice; il primo punto è progettare un prompt
senza colore. Successivamente quello che dobbiamo fare è aggiungere le
sequenze di escape che verranno riconosciute dal terminale e applicate a
determinate parti del testo a colori. I terminali standard di Linux ed i
terminali di X permettono la regolazione del colore del testo (foreground) e
dello sfondo (background), inoltre possono generare caratteri in "Grassetto"
qualora lo si desideri. Abbiamo la possibilità di scegliere fra otto colori
differenti.
I colori sono selezionati aggiungendo le sequenze speciali alla variabile
PS1 inserendo dei valori numerici tra \e[ e una m.
Se specifichiamo più di un codice numerico, separiamo ogni codice con un
punto e virgola. Ecco un codice colore di esempio:
Codice 1.6: Aggiungere colore |
"\e[0m"
|
Quando si specifica uno zero come codice numerico, si comanda al terminale
di ripristinare il testo, lo sfondo e l'eventuale grassetto ai loro valori
di base. Generalmente è desiderabile utilizzare questa opzione alla fine
della stringa del vostro prompt, in tal modo il testo che batterete non sarà
colorato. Ora prendiamo in considerazione i codici dei colori dando una
occhiata alla seguente immagine:
Figura 1.1: Tabella colori |
 |
Per utilizzare la tabella, si trova il colore che si vuole utilizzare e si
cerca il valore corrispondente al testo (30-37) e allo sfondo (40-47).
Per esempio, se si desidera il colore verde del testo su uno sfondo normale
i valori sono rispettivamente 32 e 40. Quindi, ora si prenda la combinazione
desiderata e la si aggiunga alla sequenza del prompt in questo modo:
Codice 1.7: Un prompt base personalizzato |
$ export PS1="\w> "
|
diventa:
Codice 1.8: Un prompt base personalizzato e colorato |
$ export PS1="\e[32;40m\w> "
|
Questo esempio se pur bello non è ancora perfetto. Dopo che la bash stampa a
video la cartella di lavoro, è necessario impostare il colore ai valori di
base con una sequenza \e[0m:
Codice 1.9: Un prompt colorato migliorato |
$ export PS1="\e[32;40m\w> \e[0m"
|
Questa definizione genererà un piacevole prompt verde, ma sarà ancora
necessario ritoccare un pochino la stringa di definizione. Non c'è bisogno
di includere il valore 40 per la regolazione del colore dello sfondo, perchè
questo è il valore standard impostato di base. Inoltre si può notare che il
colore verde è abbastanza fioco; si può riparare a tale problema aggiungendo
un codice di colore 1 che imposta il testo più luminoso e grassetto.
In aggiunta a questo cambiamento, si dovrà rinchiudere tutti i caratteri che
non generano output con le sequenze di escape di bash \[ e \].
Queste combinazioni verranno interpretate da bash in modo tale che i
caratteri inclusi non occuperanno spazio sulla linea, in questa maniera si
permetterà alla normale funzione di capolinea automatico di operare
correttamente. Senza queste combinazioni, ci si ritroverà con un bellissimo
prompt che sporcherà lo schermo non appena capiterà di scrivere un comando
che raggiungerà l'estrema destra del terminale. Ecco la versione finale del
prompt:
Codice 1.10: Un prompt carino e colorato |
$ export PS1="\[\e[32;1m\]\w> \[\e[0m\]"
|
Non siate preoccupati nell'usare parecchi colori nello stesso prompt come
nell'esempio:
Codice 1.11: Ancora più colorato |
$ export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\H> \[\e[0m\]"
|
Divertitevi con Xterm
Vi è stato indicato come aggiungere informazioni e colore al vostro prompt,
ma è possibile fare di più. Si possono aggiungere ulteriori codici speciali
che andranno a modificare dinamicamente la barra del titolo del vostro
terminale X (come rxvt o aterm). Tutto quello di cui si ha bisogno è inserire
le seguenti sequenze alla variabile PS1:
Codice 1.12: Aggiornare la barra del titolo di xterm |
"\e]2;barradeltitolo\a"
|
Semplicemente si sostituisce la stringa barradeltitolo con il testo
che si desidera far apparire sulla barra del titolo del proprio xterm e il
gioco è fatto! Non è necessario utilizzate del normale testo statico, ma è
inoltre possibile inserire delle sequenze di escape sul titolo.
Si guardi il seguente esempio dove è stato inserito il nome utente, il nome
della macchina e la cartella di lavoro corrente nella barra del titolo così
come la definizione di un breve prompt verde chiaro:
Codice 1.13: Un xterm estremamente utile |
$ export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
|
L'esempio riportato è quello utilizzato nell'immagine della tabella colori.
Questo prompt è molto utile poichè inserisce le informazioni sulla barra del
titolo piuttosto che nel terminale che è limitato dal numero di caratteri che
possono riempire una linea. Assicuratevi di aver circondato la sequenza con
le stringhe \[ e \] in questa maniera, per quanto riguarda il
terminale, questa stringa non occuperà spazio.
Il problema di inserire molte informazioni nella barra del titolo è dovuto al
fatto che in un terminale non grafico (come la normale console) queste
informazioni non possono essere visualizzate. Per risolvere tale problema,
è possibile inserire uno script nel proprio ~/.bashrc:
Codice 1.14: Aggiungere informazioni utili a xterm e alla console di sistema |
if [ "$TERM" = "linux" ]
then
export PS1="\[\e[32;1m\]\u@\H > \[\e[0m\]"
else
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
fi
|
Questo script di bash pone la condizione di impostare dinamicamente il prompt
in base alle vostre configurazioni correnti. Per consolidare il tutto è
necessario configurare il vostro ~/.bash_profile in questo modo
varrà caricato dal vostro ~/.bashrc all'avvio. Si controlli che
le seguenti linee siano nel vostro ~/.bash_profile:
Codice 1.15: Madificare il bash_profile |
source ~/.bashrc
|
In questo modo è possibile avere le stesse impostazioni del prompt sia che si
utilizzi una console di sistema sia un xterm.
Benissimo ora si è imparato come personalizzare il proprio prompt e quello
che rimane è solo divertirsi ad adattarlo alle proprie esigenze!
Riferimenti
-
rxvt questo è un piccolo grande
xterm che ha una buona quantità di documentazione relativa alle sequenze
di escape inserite nella cartella doc inclusa nel pacchetto
dei sorgenti.
-
aterm questo è un altro
terminale basato su rxvt. Supporta parecchie caratteristiche piacevoli,
come la trasparenza e la colorazione.
-
bashish
è un motore grafico di temi per tutti i tipi di terminali. Si guardi
qualche bella
immagine di bashish in azione!
Informazioni sull'autore
Daniel Robbins vive a Albuquerque, New Mexico. E' stato Presidente/CEO del
Gentoo Technologies Inc., il Capo Architetto del Gentoo Project e come
autore contribuisce a molti libri pubblicati da MacMillan: Caldera OpenLinux
Unleashed, SuSE Linux Unleashed e Samba Unleashed. Daniel è stato coinvolto
nei computer da quando al secondo grado gli è stato mostrato il linguaggio di
programmazione Logo e ad una dose potenzialmente letale di Pac Man. Questo
probabilmente spiega perchè ha lavorato come Lead Graphic Artist alla SONY
Electronic Publishing/Psygnosis. Daniel adora spendere tempo con sua moglie
Mary e la sua nuova figlia, Hadassah. Puoi contattare Daniel a
Daniel Robbins.
|