[How To] Customizzare il prompt dei comandi

Il prompt dei comandi è la stringa che vedete comparire quando aprite un emulatore di terminale. In genere è del tipo:

root@frugalware-chaos:/home/chaosware#

ovvero:

nomeuntente@hostname:cartella

Non tutte le distribuzioni hanno lo stesso output, questo perchè il prompt dei comandi è relativamente facile da mosidifacare a proprio piacimento, vediamo come fare!

Il pompt dei comandi è controllato da 4 variabili della shell, PS1, PS2, PS3 e PS4, ognuna ha le sue caratteristiche e serve a personalizzare una specifica parte di output:

PS1 : il valore di PS1 è quello usato dalla prima stringa dell’output. Il valore di default è \s-\v\$ .
PS2 : il valore di PS2 è usato come output secondario. Di default vale >
PS3 : il valore di PS3 è usato come valore per il comando seleziona
PS4 : il valore di PS4 precede ogni output del prompt di terminale. Il primo carattere di PS4 viene replicato più volte per indicare i valori multipli di interazione.Il valore di default è +

Nonostante tutta questa abbondanza, per avere un bell’output ci basta modificare la variabile PS1.

A questo punto, apriamo il file ~/.bashrc (se volete modificare il loook del prompt dell’utente) oppure /etc/bashrc (per modificare l’output di root, per modificarlo dovrete avere i permessi di superutente) e modifichiamo PS1 a nostro piacimento.

Mettiamo ad esempio:

PS1="scrivi istruzione:"

Ecco l’output:

schermata3

Bash permette di personalizzare questa prima stringa modificando colori, output etc, basta utilizzare i seguenti codici:

\a : carattere ASCII
\d : la data nella versione "giorno della settimana / mese / giorno del mese (Gio Mag 5 )
\D{formato} : il parametro format viene visualizzato come output (in pratica permette di modificare quello che viene cisualizzato dal comando precedente)
\e : Un carattere ASCII di escape (033)
\h : il nome dell'hostname fino al primo punto '.'
\H : l'hostname completo
\j : il numero di processi controllati attualmente dalla shell
\l : il nome della shell del dispositivo
\n : nuova linea
\r : ritorno a capo
\s : il nome della shell, il basename di $0 (porzione finale che segue l'ultimo slash)
\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 in formato 12 ore am/pm
\A : l'ora corrente nel formato 24 ore HH:MM
\u : username dell'utente corrente
\v : la versione di bash
\V : la release di bash, versione + patch (ex. 2.00.0)
\w : la directory attuale di lavoro, con $HOME indicata con ~
\W : il nome della attuale direcotry di lavoro, con $HOME indicata con ~
\! : il numero storico del comando
\# : il numero del comando
\$ : se l'UID è 0, restituisce #, altrimenti $
\nnn : il carattere corrsipondente a un numero ottale nnn
\\ : uno slash
\[ : inizio di una sequenza di caratteri non stampabili
\] : fine della sequenza di caratteri non stampabili

ad esempio mettiamo:

PS1="[\d \t \u@\h:\w ] $ "

Il risultato è il seguente:

schermata4

Per aggiungere i colori invece, si deve usare la seguente sintassi:

'\e[x;ym $PS1 \e[m'

il significato è il seguente:

\e[ :  inizia lo schema di colori
x;y : seleziona il paio di colori da usare (x;y)
$PS1 :  è il tuo prompt
\e[m : fine dello schema di colori

Di seguito eccovi i comandi per i colori (preso dalla wiki di arch linux)

# Reset
Color_Off='\e[0m' # Text Reset

# Regular Colors
Black='\e[0;30m' # Black
Red='\e[0;31m' # Red
Green='\e[0;32m' # Green
Yellow='\e[0;33m' # Yellow
Blue='\e[0;34m' # Blue
Purple='\e[0;35m' # Purple
Cyan='\e[0;36m' # Cyan
White='\e[0;37m' # White

# Bold
BBlack='\e[1;30m' # Black
BRed='\e[1;31m' # Red
BGreen='\e[1;32m' # Green
BYellow='\e[1;33m' # Yellow
BBlue='\e[1;34m' # Blue
BPurple='\e[1;35m' # Purple
BCyan='\e[1;36m' # Cyan
BWhite='\e[1;37m' # White

# Underline
UBlack='\e[4;30m' # Black
URed='\e[4;31m' # Red
UGreen='\e[4;32m' # Green
UYellow='\e[4;33m' # Yellow
UBlue='\e[4;34m' # Blue
UPurple='\e[4;35m' # Purple
UCyan='\e[4;36m' # Cyan
UWhite='\e[4;37m' # White

# Background
On_Black='\e[40m' # Black
On_Red='\e[41m' # Red
On_Green='\e[42m' # Green
On_Yellow='\e[43m' # Yellow
On_Blue='\e[44m' # Blue
On_Purple='\e[45m' # Purple
On_Cyan='\e[46m' # Cyan
On_White='\e[47m' # White

# High Intensity
IBlack='\e[0;90m' # Black
IRed='\e[0;91m' # Red
IGreen='\e[0;92m' # Green
IYellow='\e[0;93m' # Yellow
IBlue='\e[0;94m' # Blue
IPurple='\e[0;95m' # Purple
ICyan='\e[0;96m' # Cyan
IWhite='\e[0;97m' # White

# Bold High Intensity
BIBlack='\e[1;90m' # Black
BIRed='\e[1;91m' # Red
BIGreen='\e[1;92m' # Green
BIYellow='\e[1;93m' # Yellow
BIBlue='\e[1;94m' # Blue
BIPurple='\e[1;95m' # Purple
BICyan='\e[1;96m' # Cyan
BIWhite='\e[1;97m' # White

# High Intensity backgrounds
On_IBlack='\e[0;100m' # Black
On_IRed='\e[0;101m' # Red
On_IGreen='\e[0;102m' # Green
On_IYellow='\e[0;103m' # Yellow
On_IBlue='\e[0;104m' # Blue
On_IPurple='\e[0;105m' # Purple
On_ICyan='\e[0;106m' # Cyan
On_IWhite='\e[0;107m' # White

Mettiamo ad esempio il colore cyano alla riga di sopra:

PS1="\[\e[4;36m\]\d \t \u@\h:\w $ \e[4;36m"

il risultato è il seguente:

schermata5

 

Un altro modo per modificare i colori è tput, seguendo i codici della tabella sotto, iniziamo dal testo:

tput bold - Set bold mode
tput dim - turn on half-bright mode
tput smul - begin underline mode
tput rmul - exit underline mode
tput rev - Turn on reverse mode
tput smso - Enter standout mode (bold on rxvt)
tput rmso - Exit standout mode
tput sgr0 - Turn off all attributes

passiamo ai colori:

tput setab [1-7] - Set a background color using ANSI escape
tput setb [1-7] - Set a background color
tput setaf [1-7] - Set a foreground color using ANSI escape tput setf
[1-7] - Set a foreground color

ed ecco i codici dei colori:

0 - Nero
1 - Rosso
2 - Verde
3 - Giallo
4 - Blu
5 - Magenta
6 - Cyano
7 - Bianco

E con questo abbiamo finito, abbiamo un terminale cutomizzato come piace a noi, aggiungendo ance screenfetch e la trasparenza, ecco il risultato:

schermata6

Published by

Chaosphere

Appassionato di Linux dal 2010, scrivo quando ho del tempo libero a disposizione e lo faccio per passione e per diletto personale.

HTML Snippets Powered By : XYZScripts.com