Bash
Personnalisation de PS1
Recherche…
Modifier l'invite PS1
Pour changer PS1, il suffit de changer la valeur de la variable shell PS1. La valeur peut être définie dans le fichier ~/.bashrc
ou /etc/bashrc
, en fonction de la distribution. PS1 peut être changé en n'importe quel texte simple comme:
PS1="hello "
Outre le texte en clair, un certain nombre de caractères spéciaux avec antislash sont pris en charge:
Format | action |
---|---|
\a | un caractère de sonnerie ASCII (07) |
\d | la date au format «Jour de la semaine» (par exemple, «Mardi 26 mai») |
\D{format} | le format est passé à strftime (3) et le résultat est inséré dans la chaîne d'invite; un format vide entraîne une représentation temporelle spécifique à l'environnement local. Les accolades sont obligatoires |
\e | un caractère d'échappement ASCII (033) |
\h | le nom d'hôte jusqu'au premier '.' |
\H | le nom d'hôte |
\j | le nombre d'emplois actuellement gérés par le shell |
\l | le nom de base du nom de périphérique du terminal du shell |
\n | nouvelle ligne |
\r | retour de chariot |
\s | le nom du shell, le nom de base de 0 $ (la partie qui suit la barre oblique finale) |
\t | l'heure actuelle en 24 heures Format HH: MM: SS |
\T | l'heure actuelle en 12 heures HH: MM: SS format |
\@ | l'heure actuelle au format 12 heures / heure |
\A | l'heure actuelle en format 24 heures HH: MM |
\u | le nom d'utilisateur de l'utilisateur actuel |
\v | la version de bash (par exemple, 2.00) |
\V | la sortie de bash, version + niveau du patch (par exemple, 2.00.0) |
\w | le répertoire de travail actuel, avec $ HOME abrégé avec un tilde |
\W | le nom de base du répertoire de travail en cours, avec $ HOME abrégé avec un tilde |
\! | le numéro d'historique de cette commande |
\# | le numéro de commande de cette commande |
\$ | si l'UID effectif est 0, un #, sinon un $ |
\nnn* | le caractère correspondant au nombre octal nnn |
\ | une barre oblique inverse |
\[ | commencer une séquence de caractères non imprimables, qui pourrait être utilisée pour incorporer une séquence de contrôle de terminal dans l'invite |
\] | terminer une séquence de caractères non imprimables |
Ainsi, par exemple, nous pouvons configurer PS1 pour:
PS1="\u@\h:\w\$ "
Et ça va sortir:
utilisateur @ machine: ~ $
Afficher une branche git en utilisant PROMPT_COMMAND
Si vous vous trouvez dans un dossier d'un dépôt git, il peut être intéressant de montrer la branche actuelle sur laquelle vous vous trouvez. Dans ~/.bashrc
ou /etc/bashrc
ajoutez ce qui suit (git est requis pour que cela fonctionne):
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\$ "
Si nous sommes dans un dossier dans un dépôt git, cela va générer:
utilisateur de la branche @ machine: ~ $
Et si nous sommes dans un dossier normal:
utilisateur @ machine: ~ $
Afficher le nom de la branche git à l'invite du terminal
Vous pouvez avoir des fonctions dans la variable PS1, assurez-vous simplement de la citer seule ou utilisez la commande escape pour les caractères spéciaux:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
PS1='\u@\h:\w$(gitPS1)$ '
Il vous donnera une invite comme celle-ci:
user@Host:/path (master)$
Remarques:
- Apportez les modifications dans le fichier
~/.bashrc
ou/etc/bashrc
ou~/.bash_profile
ou~./profile
(selon le système d'exploitation) et enregistrez-le. - Exécutez le
source ~/.bashrc
(spécifique à la distribution) après avoir enregistré le fichier.
Afficher l'heure dans l'invite du terminal
timeNow(){
echo "$(date +%r)"
}
PS1='[$(timeNow)] \u@\h:\w$ '
Il vous donnera une invite comme celle-ci:
[05:34:37 PM] user@Host:/path$
Remarques:
- Apportez les modifications dans le fichier
~/.bashrc
ou/etc/bashrc
ou~/.bash_profile
ou~./profile
(selon le système d'exploitation) et enregistrez-le. - Exécutez le
source ~/.bashrc
(spécifique à la distribution) après avoir enregistré le fichier.
Coloriser et personnaliser l'invite du terminal
Voici comment l'auteur définit sa variable PS1
personnelle:
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
Et voici à quoi ressemble mon invite:
Référence de couleur:
# 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
Remarques:
Apportez les modifications dans le fichier
~/.bashrc
ou/etc/bashrc
ou~/.bash_profile
ou~./profile
(selon le système d'exploitation) et enregistrez-le.Pour
root
vous devrez peut-être également modifier le fichier/etc/bash.bashrc
ou/root/.bashrc
Exécutez le
source ~/.bashrc
(spécifique à la distribution) après avoir enregistré le fichier.Remarque: si vous avez enregistré les modifications dans
~/.bashrc
, n'oubliez pas d'ajouter lasource ~/.bashrc
dans votre~/.bash_profile
pour que cette modification dePS1
soit enregistrée à chaque démarrage de l'application Terminal.
Afficher le statut et l'heure de retour de la commande précédente
Parfois, nous avons besoin d'un indice visuel pour indiquer le statut de retour de la commande précédente. L'extrait suivant le met en tête de la PS1.
Notez que la fonction __stat () devrait être appelée à chaque fois qu'une nouvelle PS1 est générée, sinon elle resterait liée au statut de retour de la dernière commande de votre fichier .bashrc ou .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