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

98

Est-il possible de changer les couleurs dans l'invite de commande pour [email protected] , ainsi que dans le répertoire actuel et les parties de commande de l'invite affichée?

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 empêchent de distinguer les lignes qui sont des commandes et celles qui sont sorties.

    
posée Luiz Rodrigo 19.04.2012 - 00:51
la source

3 réponses

124

Vous pouvez modifier les paramètres de modification du 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 en dessous de if [ "$color_prompt" = yes ]; then qui devrait ressembler à:

    PS1='${debian_chroot:+($debian_chroot)}\[3[01;32m\]\[email protected]\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]\$ '
    

    Faites attention à la partie \[email protected]\h il dit "utilisateur @ hôte" et le nombre qui le précède \[3[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. Modifiez la ligne afin qu'elle ressemble à:

    PS1='${debian_chroot:+($debian_chroot)}\[3[01;35m\]\u\[3[01;30m\]@\[3[01;32m\]\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]\$ '
    

Résultat:

Lesnumérosdecouleurssontlessuivants:

Black0;30DarkGray1;30Blue0;34LightBlue1;34Green0;32LightGreen1;32Cyan0;36LightCyan1;36Red0;31LightRed1;31Purple0;35LightPurple1;35Brown0;33Yellow1;33LightGray0;37White1;37

Références: 1 , 2 .

    
réponse donnée desgua 19.04.2012 - 03:56
la source
34

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

Ce dernier message n’a qu’une retouche intéressante. 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 où une nouvelle commande commence, en cas de sortie longue.

    
réponse donnée SPRBRN 13.11.2014 - 12:59
la source
6

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 simplement vous montrer ma demande et vous référer au lien ci-dessus pour plus de détails.

Les pièces en rapport avec la couleur sont dans la fonction setPrompt :

# 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="\[3[1;33m\]"     #First color
  COLOR2="\[3[0;33m\]"     #Second color
  NO_COLOR="\[3[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[3]0;\h - \w# 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="\[3[1;33m\]"     #First color
  COLOR2="\[3[0;33m\]"     #Second color
  NO_COLOR="\[3[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[3]0;\h - \w%pre%7\]"
      ;;
    *)
      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="3[0;0;33m"     #First color
  local COLOR2="3[0;0;36m"     #Second color
  local NO_COLOR="3[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
7\]" ;; *) 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="3[0;0;33m" #First color local COLOR2="3[0;0;36m" #Second color local NO_COLOR="3[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

Outre les couleurs, mon invite comporte 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 ) et l'affichage de l'heure dans les colonnes les plus à droite (fonction print_prompt_time ).

    
réponse donnée Scott Severance 19.04.2012 - 02:27
la source

Lire d'autres questions sur les étiquettes