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?
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
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.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.
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.
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\$ '
\[\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:
man bash
et vérifiez la section PROMPTING
.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>
où username@hostname
sont en vert gras et cwd
en bleu gras.
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: