Gentoo Logo

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

Fig. 1

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
    # Ci troviamo nella console di sistema o in telnet
    export PS1="\[\e[32;1m\]\u@\H > \[\e[0m\]"
else
    # Non ci troviamo nella console, siamo in xterm
    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.



Stampa

Aggiornato il 21 ottobre 2005

Oggetto: Perchè rimanere con il noioso e standard prompt di shell quando si può facilmente renderlo colorato e più utile? In questo articolo, Daniel Robbins vi mostrerà come modificare il prompt della shell come più vi piace così come aggiornare dinamicamente la barra del titolo del vostro terminale X.

Daniel Robbins
Autore

Franco Tampieri
Traduttore

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.