GET RID OF YOUR PROMPT ----------------------- Una delle cose più affascinanti di Linux è sicuramente la sua predisposizione verso un qualcosa che si potrebbe definire "grafica in console", anche se in realtà non è propriamente grafica. Per vario tempo l'unico mezzo che i Linuxiani avevano per comunicare con la loro macchina era la Shell, per questo motivo abbiamo visto l'espandersi di ASCII Art e librerie di Grafica ASCII (Quake-AAlib ne è un simpatico esempio). Anche gli script bash si sono evoluti inserendo sempre maggiore presenza di colori e grafica attraverso i codici di ESCAPE ed il programma DIALOG. Perché allora non rendere il proprio prompt più interessante e bello visto che avremo da convivere per lungo tempo con lui?? UN PRIMO PASSO (Introduzione al Prompt) -------------------------------- Il vostro prompt non è altro che una impostazione di sistema e come tale la si può modificare senza nessun problema, settando PS1. PS1="prova$:" trasformerà il nostro prompt di Bash in prova$: e questo è già un buon passo per la personalizzazione, potrete inserire qualsiasi carattere vogliate nel prompt. Attenzione che molte distribuzioni resettano il valore di PS1 ad ogni avvio, controllate quindi nei file di configurazione di bash che il prompt sia quello che voi effettivamente desiderate. Solitamente il valore di PS1 è impostato in /etc/bashrc ma in alcuni casi potrebbe essere in /etc/profile o in scripts avviati all'esecuzione. SEQUENZE DI ESCAPE --------------------------- Ci sono alcune variabili se così si possono definire che il sistema di mettete sotto mano in forma di sequenze di escape, queste altro non sono che caratteri non stampabili, ma aventi un significato. \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 \[ comincia una sequenza di caratteri non stampabili \] termina la sequenza di caratteri non stampabili Settando quindi il nostro prompt come PS1="[\u@\h:\w/> " otterremo il seguente risultato: [javanx@cosmo:/home/> Il quale di per se è già migliore dei prompt medi di una distribuzione, ma potrete personalizzarlo ulteriormente come più vi aggrada aggiungendo qualsiasi delle sequenze presentate sopra. (ad esempio un \a alla fine delle impostazioni produrrà un beep ogni volta che il prompt appare ed alla pressione di ogni tasto) LA SHELL PRENDE VITA (I Colori) -------------------------- Le sequenze di escape sono un ottimo punto di inizio per la personalizzazione del proprio prompt ma non sono anche la fine delle possibilità che la shell mette a vostra disposizione. I colori sono caratteri di escape a loro volta, e come tali devono essere trattati. Ogni sequenza di numeri indicante un colore deve iniziare con "\[\033[", essere seguiti da una "m" e terminare con "\]" tra questi due elementi viene inserito il codice del colore, qui sotto potrete trovare una tabella elencante i codici dei colori più comuni. Nero 0;30 Grigio Scuro 1;30 Blu 0;34 Blu Chiaro 1;34 Verde 0;32 Verde Chiaro 1;32 Ciano 0;36 Ciano Chiaro 1;36 Rosso 0;31 Rosso Chiaro 1;31 Viola 0;35 Viola Chiaro 1;35 Marrone 0;33 Giallo 1;33 Grigio Chiaro 0;37 Bianco 1;37 quindi con un echo -e "\033[0;34m ciao" scriveremo ciao in BLU (l'opzione -e abilità l'interpretazione di caratteri di escape) ottenendo però come risultato che il nostro prompt resti blu per sempre... Questo problema va considerato anche nel momento in cui si setta il prompt, in quanto l'ultimo colore settato sarà quello che assumerà il testo di tutta la shell. Un altro esempio di prompt interessante potrebbe essere: PS1="\[\033[1;32m\][\u@\h:\w/> \[\033[0;37m\]" Il quale si presenta uguale a quello descritto nella parte precedente ma ci mostrerà l'intero prompt tranne i comandi che noi daremo nel colore verde. Modificandolo in PS1="[\[\033[1;32m\]\u\[\033[0;37m\]@\h:\w/> " otterremo invece solo il nome utente del colore verde. Il seguente script vi dovrebbe dare un' idea di come appariranno i colori sul vostro terminale #!/bin/bash clear echo "_______________________________________________________________________________" echo " On LightGray: On Black:" echo -e "\033[47m\033[1;37m White \033[0m\ 1;37m \ \033[40m\033[1;37m White \033[0m" echo -e "\033[47m\033[37m Light Gray \033[0m\ 37m \ \033[40m\033[37m Light Gray \033[0m" echo -e "\033[47m\033[1;30m Gray \033[0m\ 1;30m \ \033[40m\033[1;30m Gray \033[0m" echo -e "\033[47m\033[30m Black \033[0m\ 30m \ \033[40m\033[30m Black \033[0m" echo -e "\033[47m\033[31m Red \033[0m\ 31m \ \033[40m\033[31m Red \033[0m" echo -e "\033[47m\033[1;31m Light Red \033[0m\ 1;31m \ \033[40m\033[1;31m Light Red \033[0m" echo -e "\033[47m\033[32m Green \033[0m\ 32m \ \033[40m\033[32m Green \033[0m" echo -e "\033[47m\033[1;32m Light Green \033[0m\ 1;32m \ \033[40m\033[1;32m Light Green \033[0m" echo -e "\033[47m\033[33m Brown \033[0m\ 33m \ \033[40m\033[33m Brown \033[0m" echo -e "\033[47m\033[1;33m Yellow \033[0m\ 1;33m \ \033[40m\033[1;33m Yellow \033[0m" echo -e "\033[47m\033[34m Blue \033[0m\ 34m \ \033[40m\033[34m Blue \033[0m" echo -e "\033[47m\033[1;34m Light Blue \033[0m\ 1;34m \ \033[40m\033[1;34m Light Blue \033[0m" echo -e "\033[47m\033[35m Purple \033[0m\ 35m \ \033[40m\033[35m Purple \033[0m" echo -e "\033[47m\033[1;35m Pink \033[0m\ 1;35m \ \033[40m\033[1;35m Pink \033[0m" echo -e "\033[47m\033[36m Cyan \033[0m\ 36m \ \033[40m\033[36m Cyan \033[0m" echo -e "\033[47m\033[1;36m Light Cyan \033[0m\ 1;36m \ \033[40m\033[1;36m Light Cyan \033[0m" echo "_______________________________________________________________________________" COMANDI ESTERNI NEL PROMPT -------------------------- Si possono inserire comandi esterni nel vostro prompt o qualsiasi variabile di ambiente. Questo è possibile in quanto il prompt interpreta la stringa che gli viene passata come se fosse una specie di piccolo script e quindi ne ritorna i valori. Ad esempio inserendo PS1="$(uname): " otterremo come prompt Linux: nel caso in cui stiamo usando appunto Linux. questo perché il prompt contiene il risultato del comando "uname" che viene chiamato ad ogni apparizione del prompt. Potrete inserire qualsiasi comando passandolo preceduto da $( e seguito da ) un prompt interessante potrebbe essere quindi PS1="$(uname -a)\n:> " Il quale ci restituisce il valore di uname -a, va a capo e mostra :> apparendo quindi nel mio specifico caso come Linux cosmo.it 2.4.3-20 #1 Sun Apr 15 23:03:10 CEST 2001 i686 unknown :> Oltre ai comandi ho menzionato che si possono inserire tutte le variabili di sistema che desideriamo... per fare questo è sufficiente inserire il nome della variabile preceduto da un $, ad esempio PS1="[$HOME> " ci farà avere come prompt la nostra homedirectory seguita da > e preceduta da [ Nel mio specifico caso sarà quindi [/home/javanx> FREE YOUR IMMAGINATION ------------------------ Siete ora liberi di divertirvi con il vostro prompt, ma ricordate che la soluzione migliore è spesso quella di un prompt essenziale, in quanto includervi troppe informazioni confonderebbe solamente il nostro prompt con l'output dei programmi. Se siete interessati ad approfondire oltre la questione vi consiglio la lettura del BASH-PROMPT-HOWTO