128 votes

Changer les couleurs de l'utilisateur, de l'hôte et du répertoire dans l'invite de commande du terminal

Est-il possible de modifier les couleurs dans l'invite de commande pour l'utilisateur user@computer, ainsi que pour les parties du répertoire actuel et de la commande de l'affichage de l'invite ?

J'ai déjà vu quelque chose de similaire fait par des 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 du premier plan et de l'arrière-plan).

Ce serait très utile lorsque, par exemple, on essaie de compiler des programmes qui ont des erreurs, car de longs messages non formatés rendent difficile de distinguer quelles lignes sont des commandes et quelles lignes sont des sorties.

Couleurs dans le terminal osx

156voto

Bill K Points 32115

Vous pouvez modifier les paramètres en modifiant le fichier : ~/.bashrc.

  1. Ouvrez le fichier : gedit ~/.bashrc.

  2. Recherchez la ligne avec #force_color_prompt=yes et décommentez-la (supprimez le #).

  3. 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 qui indique "user@host" et le nombre avant \[\033[01;32m\] indique la couleur. C'est ce que vous devez modifier. Par exemple, changeons l'utilisateur en violet, le "@" en noir et l'hôte en vert. Modifiez la ligne pour qu'elle ressemble à ceci :

    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 :
description de l'image

Les numéros des 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

Références : 1, 2.

46voto

Vic Points 1820

Vous pouvez essayer le BashrcGenerator. C'est de loin le moyen le plus simple d'obtenir un invite de commande comme vous le souhaitez. J'ai remarqué que les couleurs définies ici peuvent être différentes de celles 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 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\]"

Utilisateur root 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 changer la couleur du nom d'hôte pour 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\]"

Maintenant mon préféré :

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$ "

Cet dernier invite a une petite touche agréable. Il ajoute un saut de ligne après l'invite et un saut de ligne vide avant. Vous pouvez maintenant afficher le chemin complet du répertoire sans problème, et cela rend plus clair l'endroit où une nouvelle commande débute en cas de sortie longue.


Une autre mise à jour, car ZSH est désormais l'interpréteur de commandes par défaut sur Macos. Il convient de l'éditer dans .zshrc :

NEWLINE=$'\n'
DATE=$( date +"[%Y-%m-%d %H:%M:%S]" )
PROMPT="${NEWLINE}%F{yellow}${DATE} %(!.%F{red}.%F{white})%n%F{cyan}@%m %F{yellow}%d${NEWLINE}%F{reset}> "

6voto

Scott Severance Points 13166

Pour plus de détails, consultez 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 simplement vous montrer mon invite et vous renvoyer vers le lien ci-dessus pour plus de détails.

Les parties liées aux couleurs se trouvent dans la fonction setPrompt:

# Cette fonction provient de : 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
##################################################
# Fonction d'affichage PWD fantaisie
##################################################
# Le répertoire principal (HOME) est remplacé par un ~
# Les derniers caractères pwdmaxlen du PWD sont affichés
# Les noms de répertoires partiels en tête sont supprimés
# /home/me/stuff          -> ~/stuff               si USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name si pwdmaxlen=20
##################################################
bash_prompt_shortener() {
    # Combien de caractères du $PWD doivent être conservés
    local pwdmaxlen=25
    # Indique qu'il y a eu une troncature de répertoire
    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\]"     #Première couleur
  COLOR2="\[\033[0;33m\]"     #Deuxième couleur
  NO_COLOR="\[\033[0m\]"      #Transparent - ne pas changer

  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

#Déterminer et afficher le statut de sortie de la dernière commande, si non nul.
function checkExitStatus() {
  local status="$?"
  local signal=""
  local COLOR1="\033[0;0;33m"     #Première couleur
  local COLOR2="\033[0;0;36m"     #Deuxième couleur
  local NO_COLOR="\033[0m"        #Transparent - ne pas changer

  if [ ${status} -ne 0 -a ${status} != 128 ]; then
    # Si le processus s'arrête par un signal, déterminer le nom du 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}[Sortie ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2
    #echo -ne "${COLOR1}[Sortie ${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, mon invite a quelques autres fonctionnalités, telles que des 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 si différent de zéro (fonction checkExitStatus), et l'affichage de l'heure dans les colonnes les plus à droite (fonction print_prompt_time).

1voto

gUfriL Points 11

Vous pouvez utiliser un service de génération de bash. Par exemple, j'aime le faire à travers Ezprompt. Voici un exemple que j'ai créé :

PS1="\[\e[34m\][\[\e[m\] \[\e[36m\]\A\[\e[m\] \[\e[37m\]\u\[\e[m\]\[\e[31m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \[\e[35m\]~\[\e[m\] \[\e[34m\]]\[\e[m\]\n$ "

Après avoir obtenu les résultats bash qui vous satisfont, modifiez votre invite en exécutant la commande export suivante ou en éditant le fichier ~/.bashrc avec l'éditeur de texte nano ou vim :

sudo nano ~/.bashrc

et en ajoutant la commande export :

export PS1="\[\e[34m\][\[\e[m\] \[\e[36m\]\A\[\e[m\] \[\e[37m\]\u\[\e[m\]\[\e[31m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \[\e[35m\]~\[\e[m\] \[\e[34m\]]\[\e[m\]\n$ "

-1voto

Tangani Points 1

J'ai écrit un fichier qui peut vous aider à personnaliser tout

Exécutez le fichier avec un point . pour le faire fonctionner sur le même terminal, sinon il créera un terminal enfant et les résultats ne seront pas affichés. Comme ceci :

. shortern_path_terminal.sh

Comment ça marche :

  • La variable PS1 contrôle l'affichage du terminal.

    PS1='\[\e]0;\u@\h: \w\a\]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]$ '
    • u - Référence à l'utilisateur

    • w - Référence au répertoire de travail actuel

    • W - Affiche le chemin complet jusqu'au répertoire de travail actuel

    • h - Affiche le nom du système

    • [\033[01;32m] - Précède la texture du texte

    • 01 en gras

    • 00 non gras

    • {couleur}m

        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
        Brun       0;33     Jaune        1;33
        Gris clair  0;37     Blanc         1;37

Référence

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X