web-dev-qa-db-fra.com

Modification des couleurs pour l'utilisateur, l'hôte et les informations de répertoire dans l'invite de commande du terminal

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.

Colors in osx terminal

100
Luiz Rodrigo

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 (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 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:
enter image description here

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 

Références: 1 , 2 .

133
desgua

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.

35
SPRBRN

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 setPromptname__:

# 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 checkExitStatusname__) et l'affichage de l'heure dans les colonnes les plus à droite ( fonction print_Prompt_time).

6
Scott Severance