Punto informatico Network
Canali
20100302175731_921413836_20100302175710_1291585294_TerminalMLI_spotlight.png

Come cambiare il prompt di Bash

22/04/2010
- A cura di
Linux & Open Source - La variabile di sistema PS1 contiene il prompt di Bash. In questo articolo vi mostrerò come cambiarla per rendere la console testuale un po' meno... indecifrabile.

Tag

Passa qui con il mouse e visualizza le istruzioni per utilizzare i tag!

linux (1) , prompt (1) , gnu/linux (1) , bash (1) .

Valutazione

  •  
Voto complessivo 4.5 calcolato su 30 voti

Appendice: Alcuni esempi

Adesso passiamo a qualche esempio pratico. Potete aprire un terminale in X usando uno dei vari emulatori disponibili per le varie GUI (gnome-terminal per GNOME, oppure konsole per KDE, o anche un semplice xterm, che dovrebbe andare bene per qualsiasi distribuzione) oppure potete spostarvi subito in un terminale testuale usando la combinazione Ctrl+FX (come descritto in questo articolo, ma dovrete stare molto attenti al codice 0;12 come spiegato sotto). Nel secondo caso potreste dover effettuare un login, e personalmente vi consiglio di accedere come utente normale, minimizzerete la possibilità di combinare disastri nel sistema.

Fate quindi un backup della variabile PS1 con il procedimento descritto in questa pagina, e sarete pronti per cominciare e sbizzarrirvi con i riferimenti, i parametri, le strutture e i codici di colore che ho spiegato fino adesso. Tenete anche presente la pagina su come rendere effettivi i cambiamenti.

Comunque, se non siete sicuri di quello che state per fare o se volete dei "template" su cui lavorare potete fare riferimento a quelli che elencherò di seguito: sentitevi liberi di modificarli come meglio vi aggrada.

Nota [1]: con xterm i codici di colore potrebbero non avere lo stesso effetto che in un terminale virtuale.

Esempio [0]: Gentoo default

Questa la dovreste trovare di default in una distribuzione Gentoo; in ogni caso potete copiarla e imitarla nella vostra distribuzione. È un semplice verde/blu con degli spazi per distinguere meglio la directory.

PS1='\[\e[1;32m\]\u@\h\[\e[1;34m\] \w \$\[\e[0m\] '.

Prompt_000.pngEsempio [1]: Slackware default

Questo è di default in distribuzioni come la Slackware, è molto semplice e non ha colore, ma è completa.

PS1='\u@\h:\w\$ '

Prompt_001.png

Esempio [2]: Più chiarezza

Differenziamo nome utente, nome macchina e directory corrente con rosso, blu e verde rispettivamente, lasciando i separatori con il colore di default, e degli spazi tra riferimenti e separatori.

PS1='\[\e[0;31m\]\u\[\e[0m\] @ \[\e[0;34m\]\h\[\e[0m\] : \[\e[0;32m\]\w\[\e[0m\] \$ '

Prompt_002.png

Nota [2]: come potete notare, gli spazi hanno il significato letterale e non è necessario anteporre un backslash (\) per renderli tali (in questo caso).

Nota [3]: nella rappresentazione degli spazi di Bash gli apici singoli (' ') e i doppi apici (" ") hanno lo stesso significato.

Esempio [3]: Aggiungiamo l'ora

Come il precedente, ma aggiungiamo l'ora (ore e minuti, formato 24 ore con il riferimento \A) con un colore ciano, e racchiusi da delle parentesi tonde dello stesso colore dell'ora.

PS1='\[\e[0;36m\](\A)\[\e[0m\] \[\e[0;31m\]\u\[\e[0m\] @ \[\e[0;34m\]\h\[\e[0m\] : \[\e[0;32m\]\w\[\e[0m\] \$ '

Prompt_003.png

Anche qui vedete che le parentesi tonde hanno significato letterale e non sono precedute da backslash. Ho volutamente lasciato degli spazi per rendere più leggibile la variabile, che ora proviamo a scomporre.

  • \[\e[0;36m\](\A)\[\e[0m\] è l'ora tra parentesi (14:38);
  • \[\e[0;31m\]\u\[\e[0m\] è l'utente;
  • \[\e[0;34m\]\h\[\e[0m\] è l'hostname;
  • \[\e[0;32m\]\w\[\e[0m\] è la directory corrente.

Potete facilmente notare come i riferimenti (\u, \h, \A, \w) siano "incastonati" all'interno delle strutture di colore. Quindi ogni "frammento" del prompt che abbia colore deve seguire questa indicazione:

\[\e[<colore>m\]<stringa><riferimento><stringa><riferimento><...><\[\e[0m\]>

L'ultima struttura \[\e[0m\] è opzionale e serve solo per lasciare il terminale al colore di default o per cambiare colore. Il numero (e il tipo) dei riferimenti e delle stringhe letterali è irrilevante ed è lasciato ai vostri gusti personali.

Nota [4]: se non riportate il colore allo stato di default tutti i caratteri dei comandi da terminale avranno l'ultimo colore specificato in PS1, o l'ultimo colore provato con echo in questa pagina (che non sia stato successivamente azzerato con \[\e[0m\]). Quindi potete non solo colorare il prompt, ma anche gli output degli script e le lettere stesse dei comandi che scrivete.

Nota [5]: per riportare i colori dei caratteri del terminale allo stato di default dovete ripristinare la vecchia variabile PS1 o, in alternativa, uscire dall'istanza corrente di Bash.

Esempio [4]: Aggiungiamo la data

Teniamo il prompt precedente e aggiungiamo un piccolo commento, con il colore di default, all'ora, e la data di oggi subito dopo, separata da una virgola e colorata di arancio, all'interno delle stesse parentesi.

PS1='(sono le \[\e[0;36m\]\A\[\e[0m\], \[\e[0;33m\]\d\[\e[0m\]) \[\e[0;31m\]\u\[\e[0m\] @ \[\e[0;34m\]\h\[\e[0m\] : \[\e[0;32m\]\w\[\e[0m\] \$ '

Prompt_004.png

Qui l'unica aggiunta rispetto al prompt precedente sono state la data e l'ora, in due colori diversi. Come vedete non c'è nulla di difficile; bisogna solo fare attenzione alle strutture e scrivere tutti i caratteri correttamente e al posto giusto.

Esempio [5]: Garbled terminal

Vi ricordate quando vi ho detto che è meglio non usare il codice 0;12? Questo è un terminale in cui, in qualsiasi punto di PS1, è stato usato il codice 0;12 o è stato esposto con echo.

Terminal_garbled.jpg

Il rimedio, nel caso dell'esposizione con echo, è molto semplice, e come ho già detto basta invocare reset per riportare il terminale a valori sani. In ogni caso il terminal garbling ha effetto solo su terminali virtuali (quelli raggiungibili con Ctrl+FX) e non su pseudoterminali (quelli richiamabili da X come xterm, gnome-terminal e konsole). Può essere un trucchetto per confondere le idee alla gente... : ).

Se invece il codice 0;12 è all'interno di PS1 avete fatto un danno, perché ad ogni comparsa del prompt nella shell vedrete scritti caratteri confusi. Il semplice reset non basterà più, e vi converrà uscire dalla shell attuale con exit e rifare il login, ricordando due cose:

  • finchè non userete reset e PS1 non sarà ritornato normale il terminale sarà confuso;
  • dovrete essere in grado di digitare, nell'ordine, exit, nome utente, password e reset nel garbled terminal, il che non è semplicissimo.

Nota [6]: Se avrete salvato 0;12 in un file di configurazione di Bash in PS1 in modo definitivo (e avrete già riavviato il sistema) le uniche cose che potete fare sono modificare la configurazione da GUI e, se non avete GUI, vi conviene usare un LiveCD per rimuovere il codice "dispettoso". Oppure usare un procedimento un po' macchinoso, ma efficace:

[1] - Rendere PS1 nulla con PS1='' oppure PS1=;

[2] - usare reset per ripristinare il terminale;

[3] - ripristinare un prompt sano oppure usare il default con PS1='\u@\h:\w\$ ' o PS1='\s-\v\$ '.

Potrete poi uscire dalla shell senza paura oppure modificare in tutta tranquillità il file di configurazione dove PS1 è stata "sabotata", facendola ritornare ad un valore accettabile.

Esempio [6]: Espansione di variabili e sostituzione di comandi (avanzato)

Questo lo lascio interpretare a voi.

PS1='$USER@$(hostname -s):$PWD\$ '

Prompt_005.png

Suggerimento [1]: l'espansione di variabile è quella cosa che fa vedere il contenuto di una variabile all'utente, e può essere fatta anche tramite echo.

Suggerimento [2]: la sostituzione di comandi è quella cosa che succede quando racchiudete un comando tra $() o apici inversi ``, in cui Bash non interpreta il comando ma il suo output.

Suggerimento [3]: usate questo articolo come fonte di informazioni.

Suggerimento [4]: valgono tutte le regole su colori e strutture finora elencate in questo articolo.

Iscriviti gratuitamente alla newsletter, e ti segnaleremo settimanalmente tutti i nuovi contenuti pubblicati su MegaLab.it!
Pagina precedente
Appendice: PROMPT_DIRTRIM

 

Segnala ad un amico

Tuo nome Tuo indirizzo e-mail (opzionale)
Invia a:
    Aggiungi indirizzo email
    Testo

    © Copyright 2024 BlazeMedia srl - P. IVA 14742231005

    • Gen. pagina: 0.31 sec.
    •  | Utenti conn.: 110
    •  | Revisione 2.0.1
    •  | Numero query: 40
    •  | Tempo totale query: 0.08