web-dev-qa-db-fra.com

Comment faire pour que le terminal affiche user @ machine en caractères gras?

J'ai vu dans certaines captures d'écran (je ne me souviens plus où sur le web) que le terminal peut afficher le [username@machine /]$ en gras. J'ai hâte de l'avoir aussi parce que je me retrouve toujours à faire défiler de longues sorties pour trouver avec difficulté la première ligne après ma commande.

Comment puis-je mettre le nom d'utilisateur, etc. en gras ou en couleur?

31
Benjamin

Vous devriez pouvoir le faire en définissant le PS1 Variable d'invite dans votre ~/.bashrc fichier comme celui-ci:

PS1='[\u@\h \w]\$ '

Pour le rendre coloré (et éventuellement en gras - cela dépend si votre émulateur de terminal l'a activé), vous devez ajouter des codes de couleur d'échappement:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Ici, tout ne s'échappe pas entre les 1;91m et 0m les pièces seront colorées dans le 1;91 couleur (rouge gras). Placez ces codes d'échappement autour de différentes parties de l'invite pour utiliser différentes couleurs, mais n'oubliez pas de réinitialiser les couleurs avec 0m ou bien vous aurez également une sortie de terminal colorée. N'oubliez pas de vous procurer le fichier par la suite pour mettre à jour le shell actuel: source ~/.bashrc

22
user13742

Trouvez où votre PS1 est défini dans votre .bashrc et insérer '\[\e[1m\]' au début et \[\e[0m\] à la fin.

  • \[ et \] sont nécessaires pour que le shell sache que le gâchis à l'intérieur occupe 0 espace sur l'écran, ce qui empêche certains comportements fous lors de l'édition de ligne. Vous n'avez pas besoin de trop vous en préoccuper.
  • \e[ est connu sous le nom de CSI (control sequence introducer). Vous le verrez utilisé dans la plupart des codes répertoriés sur la page Wikipedia référencée. \e signifie le caractère d'échappement.
  • Si vous regardez dans le tableau SGR sur la page Wikipedia, vous verrez que le 1 est le numéro pour le texte clair/gras et 0 pour la réinitialisation. Donc CSI 1m passe en gras et CSI 0m réinitialise la police pour que le reste de votre texte soit normal.

Wikipedia a une liste complète de codes d'échappement ANSI que vous pouvez utiliser si votre émulateur de terminal le prend en charge.

Éditer

Pour la portabilité et la lisibilité, vous devez utiliser tput au lieu des codes d'échappement codés en dur. Le seul inconvénient est que l'approche tput ne fonctionnera pas avec les terminaux qui prennent en charge les codes ANSI mais qui ont des bases de données terminfo cassées ou manquantes, mais dans ce cas, la terminfo cassée est un problème plus important car beaucoup de vos applications de console qui dépendent de terminfo peut ne pas fonctionner correctement.

Voici un exemple de ce que je fais dans mon .bashrc:

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
Magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

Voici à quoi ressemblerait une version générique de la mienne. Le 0 est l'état de sortie de la dernière commande.

PS1 screenshot

45
jw013

Il s'agit de l'invite par défaut que vous obtenez dans cygwin bash Shell:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

enter image description here

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ Prompt

Références:

6
Stephen Quan

J'utilise cette fonction Shell pour obtenir des attributs de texte dans le terminal:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    Magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    Magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

Ensuite pour l'utiliser:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

Cela me donne [username@hostname]:cwd>username@hostname sont en vert gras et cwd en bleu gras.

2
Arcege

Pour le faire ressembler à une invite Ubuntu par défaut, ajoutez

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

dans ton ~/.bashrc.

Cela produira le vert bien connu user@Host (gras), suivi de deux points blancs non gras, suivi de votre répertoire de travail en bleu gras, suivi d'un $ signe, un espace et votre commande en lettres blanches non gras:

Ubuntu Bash Prompt

1
Tobias Feil