GNU/Linux >> Tutoriels Linux >  >> Linux

Les séquences d'échappement de couleur terminales sont-elles définies n'importe où pour Bash ?

J'ai utilisé de temps en temps des couleurs dans les scripts Bash (principalement sur CentOS), mais pour rendre leur utilisation plus pratique, je finis par redéfinir variables en valeurs de couleur :

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

ou aussi avec tput :

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

J'ai parcouru le /etc/rc.d/init.d mais je n'y ai rien trouvé concernant les définitions de couleurs.

Une telle définition est-elle déjà en place? Sinon, je les mettrais dans un fichier dans /etc/rc.d/init.d par exemple, et l'avoir inclus dans mes scripts, un peu comme avec /etc/rc.d/init.d/functions

Réponse acceptée :

Il y a plusieurs aspects en jeu dans ce que vous demandez.

Premièrement, bash ne définit pas les couleurs. En fait bash n'a absolument aucune idée que les couleurs existent même. Tout ce qu'il sait, c'est que vous lui avez dit de sortir les caractères \033[0;36m . Votre émulateur de terminal (xterm, gnome-terminal, peu importe) reçoit ces caractères et comprend "Je dois commencer à sortir en cyan".

C'est donc votre émulateur de terminal qui comprend les couleurs. Votre émulateur de terminal comprend que \033[0;36m est cyan, mais un autre émulateur de terminal pourrait utiliser un ensemble de caractères entièrement différent pour le cyan (bien qu'aucun émulateur de terminal sain d'esprit n'affiche la norme et ne le fasse). C'est la raison de tput . Lorsque vous exécutez tput setaf 6 , tput va rechercher les codes d'échappement de votre terminal pour la couleur 6 (cyan) et afficher ce code d'échappement.

Revenons maintenant à bash. Comme vous l'avez peut-être remarqué, lorsque j'ai fait référence à la couleur cyan, j'ai utilisé \033[0;36m , pas \[\033[0;36m\] . Les crochets ont disparu. Le but des crochets est que lors de l'utilisation de codes d'échappement (couleurs) dans l'invite, bash doit savoir quels caractères ne sont pas imprimables (zéro largeur, n'affiche rien). Ainsi, vous enfermez des caractères non imprimables dans \[ \] . Si vous supprimez ces caractères, tout peut sembler fonctionner correctement au début, mais vous commencerez à rencontrer toutes sortes de bizarreries lorsque votre commande dépassera la largeur du terminal. En effet, lors de la saisie, bash doit savoir quand la commande doit passer à la ligne suivante. Pour ce faire, il calcule la largeur de l'invite, puis la largeur de ce que vous avez tapé.

Une autre note, à propos de tput . CYAN="\[\033[0;36m\]" n'est pas la même chose que CYAN="$(tput setaf 6)" . Comme nous venons de le dire, les crochets sont pertinents pour bash et tput va uniquement afficher les codes d'échappement du terminal.

Connexe :Linux – Linux est-il un Unix ?

Étant donné que les crochets ne sont généralement pertinents que dans l'invite, si vous utilisez des couleurs dans la sortie d'un script ou quelque chose, vous ne devez pas les utiliser. Cela signifie que si vous allez utiliser des couleurs pour plus que des invites, vous devez définir plusieurs variables. Un avec des crochets pour l'utilisation dans l'invite, et un sans pour tout le reste. Bien que vous puissiez simplement ajouter manuellement les crochets chaque fois que vous faites référence à une couleur dans l'invite.

Bref, vous voudrez probablement définir quelque chose comme :

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Linux
  1. Un guide du terminal Linux pour les débutants

  2. Comment changer la couleur de votre terminal Linux

  3. Astuces Bash pour tous les jours en ligne de commande

  4. Le but du mot-clé "do" dans Bash For Loops ?

  5. Terminal prenant en charge le code d'échappement en italique ANSI ?

20 outils de productivité pour le terminal Linux

Une introduction à l'émulateur de terminal DomTerm pour Linux

Quel est l'avantage objectif des séquences d'échappement sur Tput ?

La boucle Bash FOR expliquée et simplifiée

3 lecteurs multimédias musicaux pour le terminal Debian 10

Les 30 meilleurs émulateurs de terminaux Linux et éditeurs Bash