Bash
Personalizzazione di PS1
Ricerca…
Modifica prompt PS1
Per cambiare PS1, devi solo cambiare il valore della variabile di shell PS1. Il valore può essere impostato in ~/.bashrc
o /etc/bashrc
, a seconda della distro. PS1 può essere modificato in qualsiasi testo normale come:
PS1="hello "
Oltre al testo semplice, sono supportati numerosi caratteri speciali con escape alla barra rovesciata:
Formato | Azione |
---|---|
\a | un carattere campana ASCII (07) |
\d | la data nel formato "Data del giorno della settimana" (es. "Mar 26 maggio") |
\D{format} | il formato viene passato a strftime (3) e il risultato viene inserito nella stringa di richiesta; un formato vuoto produce una rappresentazione temporale specifica della locale. Le parentesi sono obbligatorie |
\e | un carattere di escape ASCII (033) |
\h | il nome host fino al primo '.' |
\H | il nome host |
\j | il numero di lavori attualmente gestiti dalla shell |
\l | il nome di base del nome del dispositivo terminale della shell |
\n | nuova linea |
\r | ritorno a capo |
\s | il nome della shell, il nome di base di $ 0 (la parte che segue la barra finale) |
\t | l'ora corrente nel formato HH: MM: SS di 24 ore |
\T | l'ora corrente nel formato HH: MM: SS di 12 ore |
\@ | l'ora corrente nel formato am / pm delle 12 ore |
\A | l'ora corrente nel formato HH: MM a 24 ore |
\u | il nome utente dell'utente corrente |
\v | la versione di bash (es. 2,00) |
\V | il rilascio di bash, versione + livello di patch (es. 2.00.0) |
\w | la directory di lavoro corrente, con $ HOME abbreviato con una tilde |
\W | il nome di base della directory di lavoro corrente, con $ HOME abbreviato con una tilde |
\! | il numero di cronologia di questo comando |
\# | il numero di comando di questo comando |
\$ | se l'UID effettivo è 0, un #, altrimenti un $ |
\nnn* | il carattere corrispondente al numero ottale nnn |
\ | un backslash |
\[ | iniziare una sequenza di caratteri non stampabili, che potrebbe essere utilizzata per incorporare una sequenza di controllo terminale nel prompt |
\] | termina una sequenza di caratteri non stampabili |
Ad esempio, possiamo impostare PS1 su:
PS1="\u@\h:\w\$ "
E produrrà:
utente @ macchina: ~ $
Mostra un ramo git usando PROMPT_COMMAND
Se sei all'interno di una cartella di un repository git, potrebbe essere bello mostrare il ramo corrente su cui ti trovi. In ~/.bashrc
o /etc/bashrc
aggiungi quanto segue (per funzionare, git è necessario):
function prompt_command {
# Check if we are inside a git repository
if git status > /dev/null 2>&1; then
# Only get the name of the branch
export GIT_STATUS=$(git status | grep 'On branch' | cut -b 10-)
else
export GIT_STATUS=""
fi
}
# This function gets called every time PS1 is shown
PROMPT_COMMAND=prompt_command
PS1="\$GIT_STATUS \u@\h:\w\$ "
Se siamo in una cartella all'interno di un repository git questo produrrà:
ramo utente @ macchina: ~ $
E se siamo all'interno di una cartella normale:
utente @ macchina: ~ $
Mostra il nome del ramo git nel prompt del terminale
Puoi avere funzioni nella variabile PS1, assicurati solo di quotarlo o usare escape per caratteri speciali:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
PS1='\u@\h:\w$(gitPS1)$ '
Ti darà una richiesta come questa:
user@Host:/path (master)$
Gli appunti:
- Apportare le modifiche in
~/.bashrc
o/etc/bashrc
o~/.bash_profile
o~./profile
File~./profile
(a seconda del sistema operativo) e salvarlo. - Esegui
source ~/.bashrc
(distro specifico) dopo aver salvato il file.
Mostra il tempo nel prompt del terminale
timeNow(){
echo "$(date +%r)"
}
PS1='[$(timeNow)] \u@\h:\w$ '
Ti darà una richiesta come questa:
[05:34:37 PM] user@Host:/path$
Gli appunti:
- Apportare le modifiche in
~/.bashrc
o/etc/bashrc
o~/.bash_profile
o~./profile
File~./profile
(a seconda del sistema operativo) e salvarlo. - Esegui
source ~/.bashrc
(distro specifico) dopo aver salvato il file.
Colorare e personalizzare il prompt del terminale
Ecco come l'autore imposta la sua variabile personale PS1
:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
#Please use the below function if you are a mac user
gitPS1ForMac(){
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
timeNow(){
echo "$(date +%r)"
}
if [ "$color_prompt" = yes ]; then
if [ x$EUID = x0 ]; then
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;31m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;31m\]:/#\[\033[00m\] '
else
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;32m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;32m\]:/$\[\033[00m\] '
fi
else
PS1='[$(timeNow)] \u@\h \w$(gitPS1) :/$ '
fi
Ed ecco come appare il mio prompt:
Riferimento di colore:
# Colors
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
Gli appunti:
Apportare le modifiche in
~/.bashrc
o/etc/bashrc
o~/.bash_profile
o~./profile
File~./profile
(a seconda del sistema operativo) e salvarlo.Per
root
potresti dover modificare anche il file/etc/bash.bashrc
o/root/.bashrc
Esegui
source ~/.bashrc
(distro specifico) dopo aver salvato il file.Nota: se hai salvato le modifiche in
~/.bashrc
, ricorda di aggiungeresource ~/.bashrc
nel tuo~/.bash_profile
modo che questa modifica inPS1
venga registrata ogni volta che si avvia l'applicazione Terminale.
Mostra lo stato e il tempo di ritorno del comando precedente
A volte abbiamo bisogno di un suggerimento visivo per indicare lo stato di ritorno del comando precedente. Lo snippet seguente lo mette in testa alla PS1.
Nota che la funzione __stat () dovrebbe essere chiamata ogni volta che viene generato un nuovo PS1, altrimenti si attaccherà allo stato di ritorno dell'ultimo comando di .bashrc o .bash_profile.
# -ANSI-COLOR-CODES- #
Color_Off="\033[0m"
###-Regular-###
Red="\033[0;31m"
Green="\033[0;32m"
Yellow="\033[0;33m"
####-Bold-####
function __stat() {
if [ $? -eq 0 ]; then
echo -en "$Green ✔ $Color_Off "
else
echo -en "$Red ✘ $Color_Off "
fi
}
PS1='$(__stat)'
PS1+="[\t] "
PS1+="\e[0;33m\u@\h\e[0m:\e[1;34m\w\e[0m \n$ "
export PS1