Est-il possible de changer les couleurs dans la commande Invite pour le user@computer
, ainsi que dans le répertoire courant et les parties de commande de l'affichage de l'invite?
J'ai déjà vu quelque chose comme ceci faite par les utilisateurs d'OSX, mais je ne sais pas comment faire la même chose dans le terminal gnome (je ne peux changer que les couleurs de premier plan et d'arrière-plan).
Cela serait très utile lorsque, par exemple, vous essayez de compiler des programmes qui contiennent des erreurs, car de longs messages non formatés rendent difficile la distinction entre les lignes qui sont des commandes et celles qui sont sorties.
Vous pouvez modifier les paramètres en modifiant le fichier: ~/.bashrc
.
Ouvrez le fichier: gedit ~/.bashrc
.
Recherchez la ligne avec #force_color_Prompt=yes
et décommentez (supprimez le #
).
Recherchez la ligne ci-dessous if [ "$color_Prompt" = yes ]; then
qui devrait ressembler à ceci:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Faites attention à la partie \u@\h
elle dit "utilisateur @ hôte" et le nombre qui le précède \[\033[01;32m\]
indique la couleur. C'est ce que vous devez changer. Par exemple, modifions l'utilisateur en violet, le "@" en noir et l'hôte en vert. Editez la ligne pour qu'elle ressemble à:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u\[\033[01;30m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Résultat:
Les numéros de couleurs sont:
Noir 0; 30 Gris foncé 1; 30 Bleu 0; 34 Bleu clair 1; 34 Vert 0; 32 Vert clair 1; 32 Cyan 0; 36 Cyan clair 1; 36 Rouge 0; 31 Rouge clair 1; 31 Violet 0; 35 Violet clair 1; 35 Marron 0; 33 Jaune 1; 33 Gris clair 0; 37 Blanc 1; 37
Vous pouvez essayer le BashrcGenerator . C’est de loin le moyen le plus simple d’obtenir une invite comme vous le souhaitez. J'ai remarqué que les couleurs définies ici peuvent être différentes de votre propre système, mais c'est un petit problème. Avec le code généré, vous pouvez changer les couleurs vous-même.
Utilisateur du serveur:
export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"
Racine du serveur:
export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;31m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"
Et si nécessaire, vous pouvez modifier la couleur du nom d’hôte afin de refléter différents types de serveurs.
J'utilise un format différent pour mon ordinateur local:
export PS1="\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] > \[\e[0m\]"
Mon préféré maintenant:
export PS1="\n\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] \[\e[0m\]\n$ "
Cette dernière invite a une belle touche. Il ajoute une nouvelle ligne après l'invite et une nouvelle ligne vide avant. Maintenant, vous pouvez afficher le chemin complet du répertoire sans problème, et cela indique plus clairement le début d'une nouvelle commande, en cas de sortie longue.
Pour plus de détails, voir ce HOWTO détaillé .
En bref, vous pouvez modifier l’invite en modifiant la variable d’environnement $ PS1. Il y a tellement de choses à dire ici que je vais vous montrer mon guide et vous référer au lien ci-dessus pour plus de détails.
Les parties relatives à la couleur se trouvent dans la fonction setPrompt
name__:
# This function from: https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Wolfman.27s
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff -> ~/stuff if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_Prompt_shortener() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
function setPrompt {
COLOR1="\[\033[1;33m\]" #First color
COLOR2="\[\033[0;33m\]" #Second color
NO_COLOR="\[\033[0m\]" #Transparent - don't change
case $TERM in
xterm*)
TITLEBAR="\[\033]0;\h - \w\007\]"
;;
*)
TITLEBAR=""
;;
esac
local dash_open="${COLOR1}-${COLOR2}-"
local dash_close="${COLOR2}-${COLOR1}-"
local spacer="${COLOR2}-"
local jobs_and_history="${COLOR2}(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})"
local user_Host="${COLOR2}(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})"
local Host="${COLOR2}(${COLOR1}\H${COLOR2})"
local root_or_not="${COLOR2}(${COLOR1}\\\$${COLOR2})"
local cwd="${COLOR2}(${COLOR1}\w${COLOR2})"
#PS1="${TITLEBAR}${COLOR1}-${COLOR2}-(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})-(${COLOR1}\w${COLOR2})-${COLOR1}-\n-${COLOR2}-(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})-(${COLOR1}\\\$${COLOR2})-${COLOR1}- ${NO_COLOR}"
#PS1="${TITLEBAR}${dash_open}${cwd}${spacer}${root_or_not}${dash_close}\n${dash_open}${jobs_and_history}${spacer}${Host}${dash_close}${NO_COLOR} "
#PS2="${COLOR2}--${COLOR1}- ${NO_COLOR}"
PS1="${TITLEBAR}${COLOR1}"'${NEW_PWD}'"${COLOR2}:\$${NO_COLOR} "
PS2="$spacer$dash_close$NO_COLOR "
}
bash_Prompt_shortener
setPrompt
unset setPrompt
#Determine and display the exit Status of the last command, if non-zero.
function checkExitStatus() {
local status="$?"
local signal=""
local COLOR1="\033[0;0;33m" #First color
local COLOR2="\033[0;0;36m" #Second color
local NO_COLOR="\033[0m" #Transparent - don't change
if [ ${status} -ne 0 -a ${status} != 128 ]; then
# If process exited by a signal, determine name of signal.
if [ ${status} -gt 128 ]; then
signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)"
if [ "$signal" ]; then
signal="$signal"
fi
fi
echo -e "${COLOR1}[Exit ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2
#echo -ne "${COLOR1}[Exit ${COLOR2}${status}${COLOR1} ${COLOR2}${signal}${COLOR1}]${NO_COLOR} " 1>&2
fi
return 0
}
print_Prompt_time() {
printf "%*s\r" $(tput cols) "$(date '+%T')"
}
promptCmd() {
checkExitStatus
print_Prompt_time
}
Prompt_COMMAND=promptCmd
En plus des couleurs, my Prompt présente quelques autres fonctionnalités, telles que les noms de répertoire abrégés (voir la fonction bash_Prompt_shortener
), l'affichage automatique du statut de sortie de la dernière commande s'il est différent de zéro (fonction checkExitStatus
name__) et l'affichage de l'heure dans les colonnes les plus à droite ( fonction print_Prompt_time
).