Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 85

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Bash Prompt HOWTO: Bash e i Prompt Bash </TITLE>
<LINK HREF="Bash-Prompt-HOWTO-3.html" REL=next>
<LINK HREF="Bash-Prompt-HOWTO-1.html" REL=previous>
<LINK HREF="Bash-Prompt-HOWTO.html#toc2" REL=contents>
</HEAD>
<BODY>
<A HREF="Bash-Prompt-HOWTO-3.html">Avanti</A>
<A HREF="Bash-Prompt-HOWTO-1.html">Indietro</A>
<A HREF="Bash-Prompt-HOWTO.html#toc2">Indice</A>
<HR>
<H2><A NAME="s2">2. Bash e i Prompt Bash </A></H2>

<H2><A NAME="ss2.1">2.1 Cosa &egrave; Bash</A>
</H2>

<P>Discendente dalla Bourne Shell, Bash &egrave; un progetto GNU, la
"<B>B</B>ourne <B>A</B>gain <B>SH</B>ell". &Egrave;
l'interfaccia a linea di comando standard su molte macchine
Linux. Eccelle in interattivit&agrave;, nel supportare modifica,
completamento e richiamo della linea di comando. Supporta anche prompt
configurabili - molti lo sanno, ma non sanno quanto si pu&ograve;
fare.
<P>
<H2><A NAME="ss2.2">2.2 Quali sono i vantaggi di modificare il prompt?</A>
</H2>

<P>La maggior parte dei sistemi Linux hanno un prompt predefinito in un
colore (di solito grigio) che dice il vostro nome utente, il nome della
macchina su cui lavorate e qualche indicazione sulla directory di
lavoro corrente. Queste sono tutte informazioni utili, ma si
pu&ograve; fare molto di pi&ugrave; con il prompt: ogni genere di
informazione pu&ograve; essere visualizzata (numero di tty, ora, data,
carico della macchina, numero di utenti, uptime ...) e il prompt
pu&ograve; utilizzare colori ANSI, per farlo apparire interessante, o
per fare s&igrave; che certe informazioni siano evidenti. &Egrave;
anche possibile manipolare la barra del titolo di un Xterm per
visualizzare alcune di queste informazioni.
<P>
<P>
<H2><A NAME="ss2.3">2.3 Perch&eacute; darsi tante noie?</A>
</H2>

<P>Oltre che essere bello, &egrave; spesso utile tenere traccia delle
informazioni di sistema. Una idea che so piace a molti &egrave; la
possibilit&agrave; di mettere su macchine differenti prompt con colori
differenti. Se avete diversi Xterm aperti su macchine differenti, o se
tendete a dimenticare su quale macchina state lavorando e a cancellare
file sbagliati, troverete questa un ottima maniera per ricordare su
che macchina vi trovate.
<P>
<H2><A NAME="ss2.4">2.4 Il Primo Passo</A>
</H2>

<P>L'aspetto del prompt viene controllato dalla variabile della shell
PS1. Le continuazioni di un comando sono indicate dalla stringa PS2,
che pu&ograve; essere modificata con esattamente gli stessi metodi
qui discussi - poich&eacute; controllarla &egrave; esattamente
uguale e non &egrave; altrettanto "interessante", modificher&ograve;
primcipalmente la stringa PS1. (Ci sono anche le stringhe PS3 e
PS4. Queste non vengono mai viste dall'utente medio - si veda la
pagina di manuale di Bash se si &egrave; interessati al loro
scopo). Per modificare l'aspetto del prompt, dovete cambiare la
variabile PS1. Per fare esperimenti, potete cambiare la stringa PS1
direttamente al prompt e vedere immediatamente i risultati (questo
influenza solo la sessione corrente e i cambiamenti spariscono quando
fate log-out). Se volete rendere permanente un cambiamento del prompt,
modificate il file ~/.bashrc e aggiungete l&igrave; la nuova
definizione di PS1. Se avete permessi di root, potete guardare in
/etc/profile e modificare la linea "<B>PS1=</B>". Sappiate che in
alcune distribuzioni (almeno la Redhat 5.1) /etc/bashrc resetta le
stringhe PS1 e PS2.
<P>
<P>Prima di cominciare, &egrave; importante ricordare che la stringa PS1
viene salvata nell'ambiente. Se la modificate alla linea di comando,
il prompt cambier&agrave; di conseguenza. Prima di fare dei
cambiamenti, potete salvare il prompt corrente in un'altra variabile
d'ambiente:
<P>
<BLOCKQUOTE><CODE>
<PRE>
[giles@nikola giles]$ SAVE=$PS1
[giles@nikola giles]$
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Il prompt pi&ugrave; semplice sarebbe un singolo carattere, come:
<P>
<BLOCKQUOTE><CODE>
<PRE>
[giles@nikola giles]$ PS1=$
$ls
bin   mail
$
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Questo dimostra il modo migliore per fare esperimenti con semplici
prompt, digitarli alla linea di comando. Si noti che il testo digitato
dall'utente appare immediatamente dopo il prompt: io preferisco usare
<P>
<BLOCKQUOTE><CODE>
<PRE>
$PS1="$ "
$ ls
bin   mail
$ 
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>che inserisce uno spazio dopo il prompt, rendendolo pi&ugrave;
leggibile. Per ripristinare il prompt originale, semplicemente
richiamate la variabile che avete salvato:
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ PS1=$SAVE
[giles@nikola giles]$
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss2.5">2.5 Sequenza di Escape dei Prompt Bash </A>
</H2>

<P>Vi sono molte sequenze di escape offerte dalla shell Bash da inserire
nel prompt. Dalla pagina di manuale di Bash 2.02:
<P>
<BLOCKQUOTE><CODE>
<PRE>
Quando eseguita in modalit&agrave; interattiva, bash mostra il prompt
primario quando &egrave; pronta per leggere un comando e il prompt
secondario PS2 quando &egrave; necessario ulteriore input per
completare il comando. Bash permette di personalizzare queste stringhe
di prompt inserendo vari caratteri di escape speciali che vengono
interpretati come segue:
       \a     il carattere ASCII beep (07)
       \d     la data nel formato "Giorno-della-settimana Mese Data"
              (e.g., "Tue May 26")
       \e     un carattere di escape ASCII (033)
       \h     l'hostname fino al primo `.'
       \H     l'hostname
       \n     il carattere "newline"
       \r     il carattere "carriage return"
       \s     il nome della shell, il nome base di $0
              (la parte che segue lo slash finale)
       \t     l'ora corrente nel formato 24-ore HH:MM:SS
       \T     l'ora corrente nel formato 12-ore HH:MM:SS
       \@     l'ora corrente nel formato 12-ore am/pm
       \u     lo username dell'utente corrente
       \v     la versione di bash (e.g., 2.00)
       \V     la release di bash, versione + patchlevel
              (e.g., 2.00.0)
       \w     la directory di lavoro corrente
       \W     il nome di base della directory di lavoro corrente
       \!     il numero cronologico (history number) di questo comando
       \#     il numero di questo comando
       \$     se l'UID effettivo &egrave; 0, un #, altrimenti un $
       \nnn   il carattere corrispondente al numero ottale nnn
       \\     un backslash
       \[     comuncia una sequenza di caratteri non stampabili, che
              potrebbero essere usati per inserire una sequenza di
              controllo del terminale nel prompt
       \]     termina la sequenza di caratteri non stampabili
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Continuando da dove avevamo interrotto:
<P>
<BLOCKQUOTE><CODE>
<PRE>
[giles@nikola giles]$ PS1="\u@\h \W&gt; "
giles@nikola giles&gt; ls
bin   mail
giles@nikola giles&gt;
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Questo &egrave; simile al prompt predefinito su molte distribuzioni
Linux. Volevo un apparenza leggermente differente, cos&igrave; l'ho
cambiato a:
<P>
<BLOCKQUOTE><CODE>
<PRE>
giles@nikola giles&gt; PS1="[\t][\u@\h:\w]\$ "
[21:52:01][giles@nikola:~]$ ls
bin   mail
[21:52:15][giles@nikola:~]$ 
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="setps"></A> <A NAME="ss2.6">2.6 Impostare Permanentemente le Stringhe PS? </A>
</H2>

<P>Varie persone e distribuzioni impostano le loro stringhe PS? in posti
diversi. I posti pi&ugrave; comuni sono /etc/profile, /etc/bashrc,
~/.bash_profile e ~/.bashrc. Johan Kullstam (
<A HREF="mailto:johan19@idt.net">johan19@idt.net</A>) scrive:
<P>
<BLOCKQUOTE><CODE>
<PRE>
La stringa PS1 dovrebbe essere impostata in
.bashrc. questo perch&egrave; le shell bash non interattive resettano
PS1. La pagina di manuale di bash dice come la presenza o l'assenza di
PS1 &egrave; un buon modo di sapere se ci si trova in una sessione
bash interattiva oppure non-interattiva (e.g. uno script).

Il modo in cui mi sono accorto di questo &egrave; che startx &egrave;
uno script bash. Questo significa che startx annuller&agrave; il
vostro prompt. Quando impostate PS1 in .profile (o .bash_profile),
fate login alla consolle, fate partire X con startx, il vostro PS1
viene annullato nel processo lasciandovi con il prompt predefinito.

Una soluzione &egrave; di lanciare xterm e rxvt con l'opzione -ls per
forzarli a leggere .profile. Ma ogni volta che viene invoca una shell 
mediante uno shell-script non interativo PS1 viene perduto. system(3)
usa sh -c che se sh &egrave; bash distrugger&agrave; 
PS1. Un modo migliore &egrave; mettere la definizione di PS1 in 
.bashrc . questo viene letto ogni volta bash parte ed &egrave; dove le
cose interattive - come PS1 - dovrebbero restare.

Quindi dovrebbe essere sottolineato che PS1=..blabla.. dovrebbe stare
in .bashrc e non in .profile.
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>Ho provato a duplicare il problema che spiega, e ne ho incontrato
uno diverso: la mia variabile PROMPT_COMMAND (che verr&agrave;
introdotta pi&ugrave; tardi) &egrave; stata distrutta. Le mie
conoscenze in quest'area sono un po' vaghe, cos&igrave; mi associo a
quanto dice Johan.
<P>
<HR>
<A HREF="Bash-Prompt-HOWTO-3.html">Avanti</A>
<A HREF="Bash-Prompt-HOWTO-1.html">Indietro</A>
<A HREF="Bash-Prompt-HOWTO.html#toc2">Indice</A>
</BODY>
</HTML>