Autore Topic: Personalizzare il prompt  (Letto 1212 volte)

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Personalizzare il prompt
« il: 05 Marzo 2012 ore 03:06 »

Scopo:
  Personalizzare il prompt della shell bash
Come: Modificando il file ~/.bashrc, nello specifico la variabile PS1
Possibili conflitti o problemi:La guida fa riferimento alla shell bash (di default su Chakra e sulla stragrande maggioranza delle distro GNU/Linux), quindi non è valida per altre shell
Prerequisiti:Shell bash, editor di testi
Vantaggi: A seconda della configurazione scelta, è possibile aumentare l'utilità del prompt, aumentando o modificando le informazioni contenute, aumentare la "bellezza" modificando i colori e, sempre modificando i colori, permette di distinguere facilmente e vedere a colpo d'occhio alcune informazioni.

Svantaggi: Il prompt, se non configurato bene, può sembrare confusionario o particolarmente brutto
Tempo necessario: 5-10 minuti (la maggior parte per provare diverse combinazioni)

Fonti: Parte della guida è presa da Bash-prompt-howto

                                                              Procedimento

In Chakra come in tutte le distribuzioni GNU/Linux, in ogni terminale che apriamo ci saluta un cursore lampeggiante perceduto da questa scritta:
Codice: [Seleziona]
[gt@fisso ~]$ posto che il nome utente sia "gt" e il nome del computer sia "fisso".

Questo è il prompt. Come si vede già da questo esempio il prompt fornisce già alcune informazioni sulla sessione di terminale che si sta utilizzando (nome utente, nome della macchina e cartella in cui ci troviamo).
Naturalmente possiamo impostare il prompt in modo che le informazioni siano altre, più o meno complete.


Modificare il prompt

Inizieremo modificando temporaneamente il nostro prompt e, una volta capito il meccanismo, lo si potrà scrivere nelle impostazioni in modo che le nostre personalizzazioni rimangano.

Iniziamo a svuotare il prompt:

Codice: [Seleziona]
[gt@fisso ~]$ export PS1='>'
>

con il comando export PS1 (che è la variabile in cui sono memorizzate le informazioni sul prompt) definiamo come dovrà essere, in questo caso solo un segno >. Per ritornare alla situazione iniziale ci basterà dare il comando
Codice: [Seleziona]
source ~/.bashrc che riassegnerà alla variabile PS1 il valore salvato.

Le informazioni che possiamo farci mostrare da prompt sono:

       \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 è 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

Elenco preso da qui

Ora dobbiamo solo scegliere come mettere insieme queste informazioni

Esempi

Codice: [Seleziona]
[gt@fisso VARIE]$ echo $PS1
[\u@\h \W]\$


Questo è quello di default

Codice: [Seleziona]
[gt@fisso VARIE]$ export PS1='[\u@\h \w]\$ '
[gt@fisso ~/documenti/VARIE]$

In questo caso, rispetto al prompt di default, sostituendo \W con \w il percorso in cui ci troviamo è stampato completo, invece che solo il nome della cartella finale.

Codice: [Seleziona]
[gt@fisso ~/documenti/VARIE]$ export PS1='[\t][\u][\W]\$ '
[01:47:35][gt][VARIE]$

In questo caso abbiamo aggiunto l'ora e chiuso ogni informazione tra le []

Codice: [Seleziona]
[01:54:44][gt][VARIE]$ export PS1="\[My name is \u,\n it's \t and I'm in \w, ok?\$\] "
My name is gt,
 it's 01:54:48 and I'm in ~/documenti/VARIE, ok?$

per dire come la fantasia non ha limiti, quindi ognuno potrà crearselo come più gli piacerà.

Colorare il prompt

Il prompt può anche essere colorato, inserendo le informazione sul colore tra un \[\e[ e un m\].

I colori sono fondamentalmente 8 e sono

  0          1          2          3       4        5         6         7
Nero Rosso Verde Giallo Blu Viola Azzurro Grigio

con le varianti      0            1            e              3x                         4x               
                       Normale Grassetto         Colore del testo Colore dello sfondo
                                                                        x è il numero associato al colore

da combinare così:

Codice: [Seleziona]
\[\e[3x;0(1);4xm\].....\[\e[0m\]
dove 3x è il colore del testo (30 nero, 31 rosso, ecc...), 0(1) è la scelta se normale o grassetto e 4x (42 verde, 43 giallo) è lo sfondo. Poichè la definizione del colore ha effetto da quel punto in avanti, senza un punto di fine, se si finisce con \[\e[0m\] questo riporta la situazione colori al default.

Esempi

Codice: [Seleziona]
My name is gt,
 it's 02:37:31 and I'm in ~/documenti/VARIE, ok?$ export PS1="\[\e[37;1;44m\][\u@\h \W]\$ \[\e[0m\]"
[gt@fisso VARIE]$

il prompt risultante sarà con sfondo blu e scritta grigia in grassetto (praticamente bianco)

Codice: [Seleziona]
[gt@fisso VARIE]$ export PS1="\[\e[37;1;44m\][\u@\h \[\e[31;1;42m\]\W]\$ \[\e[0m\]"

qui il blocco nomeutente@nomehost è bianco su sfondo blu mentre il percorso è in rosso su sfondo verde

Anche qui la fantasia può arrivare dappertutto, ricordandosi che in terminali in cui si può cambiare lo sfondo la resa visiva può essere diversa da caso a caso.

Memorizzare il prompt

All'apertura di un terminale la shell legge nell'ordine il file /etc/bash.bashrc e successivamente ~/.bashrc, quindi le impostazioni in ~/.bashrc "vincono" perchè lette dopo.

Nel caso in cui volessimo memorizzare il nostro prompt solo per un utente, basterà dichiarare nel file ~/.bashrc la variabile PS1, commentando (aggiungendo un # davanti a) quella di default:

Codice: [Seleziona]
#PS1='[\u@\h \W]\$ '
PS1='\[\e[37;1;44m\][\t][\u--> \w]\$\[\e[0m\]'

questo è il mio.

Potremo fare la stessa cosa per ogni utente, sopratutto se le volessimo diversa per ogni utente; altrimenti conviene non definire PS1 nei file ~/.bashrc ma scriverla direttamente in /etc/bash.bashrc, con le stesse modalità ma ricordandosi di commentare quelle nei .bashrc degli utenti.

Ultimo esempio, si può anche definire in /etc/bash.bashrc un condizionale if per avere comportamenti diversi per diversi utenti:

Codice: [Seleziona]
if [ $UID -eq 0 ]; then
        PS1='\[\e[33;1;41m\][\t][\u--> \w]\$\[\e[0m\] '                                                                                                                 
else                                                                                                                                                                   
        PS1='\[\e[37;1;44m\][\t][\u--> \w]\$\[\e[0m\] '                                                                                                                 
fi         

che riconosce se l'utente è root, prompt con sfondo rosso, o utente normale, sfondo blu.

Nota: Fate attenzione a non lasciare spazi tra PS1= e il resto della stringa

FINE

Guida aggiornata a Febbraio 2013 -Modificata da Andreazube
« Ultima modifica: 22 Febbraio 2013 ore 12:36 da andreazube »
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline gian64

  • *
  • Post: 76
  • Reputazione: 2
  • Inesperto totale, ma posso imparare...
    • Mostra profilo
Re:Personalizzare il prompt
« Risposta #1 il: 05 Marzo 2012 ore 12:06 »
Assai interessante, appena ho un pò di tempo ci faccio qualche prova...  :)
"Una menzogna ripetuta all'infinito diventa verità"...

Meditate gente, meditate... ;)

 

Template by Homey | Sito ufficiale | Disclaimer