Comment changer la couleur de la sortie dans le Bash Linux ?

Publié 27 août 2024

Problème : Personnaliser les couleurs de sortie Bash

Les utilisateurs de Linux Bash souhaitent souvent modifier la couleur de la sortie de leur terminal. Cela peut améliorer l'apparence de l'interface en ligne de commande et aider à distinguer différents types d'informations. Beaucoup d'utilisateurs ne savent pas comment changer ces couleurs dans l'environnement Bash. Modifier les couleurs de sortie peut rendre le texte plus lisible et créer une expérience en ligne de commande plus personnelle.

Solution : Méthodes pour changer la couleur de sortie Bash

Utilisation des séquences d'échappement ANSI

Les séquences d'échappement ANSI sont des codes qui contrôlent le formatage du texte dans les terminaux. Ces séquences commencent par le caractère d'échappement (\033 ou \e) suivi de crochets et de nombres pour les couleurs.

Syntaxe de base pour changer la couleur du texte :

\033[COULEURm

Remplacez COULEUR par un nombre de 30 à 37 pour les couleurs de texte : 30 (noir), 31 (rouge), 32 (vert), 33 (jaune), 34 (bleu), 35 (magenta), 36 (cyan), 37 (blanc)

Utilisation de la commande echo avec des codes de couleur

La commande echo avec l'option -e vous permet d'utiliser des séquences d'échappement dans votre sortie.

Exemple :

echo -e "\033[31mCe texte est rouge\033[0m"

Ici, \033[31m définit la couleur du texte en rouge, et \033[0m la réinitialise à la valeur par défaut.

Autres exemples :

echo -e "\033[32mTexte vert\033[0m"
echo -e "\033[34mTexte bleu\033[0m"
echo -e "\033[33mTexte jaune\033[0m"

Utilisation de tput pour la manipulation des couleurs

La commande tput offre un moyen de changer les couleurs du texte dans les scripts.

Syntaxe de base pour définir la couleur du texte :

tput setaf NUMERO_COULEUR

NUMERO_COULEUR va de 0 à 7 : 0 (noir), 1 (rouge), 2 (vert), 3 (jaune), 4 (bleu), 5 (magenta), 6 (cyan), 7 (blanc)

Exemple :

tput setaf 1; echo "Texte rouge"; tput sgr0

Ici, tput sgr0 réinitialise le formatage du texte.

Pour définir la couleur de fond, utilisez setab au lieu de setaf :

tput setab 3; echo "Texte avec fond jaune"; tput sgr0

Ces méthodes offrent des moyens d'ajouter de la couleur à votre sortie Bash, améliorant la lisibilité de votre interface terminal.

Pour plus d'informations sur les codes d'échappement ANSI, vous pouvez consulter l'article sur les codes d'échappement ANSI.

Pour en savoir plus sur la commande tput, consultez la page du manuel Linux pour tput.

Techniques avancées pour des scripts Bash colorés

Création de variables de couleur pour une utilisation cohérente

Définissez des variables de couleur dans les scripts pour garder votre code lisible. Voici comment créer des variables de couleur :

ROUGE='\033[0;31m'
VERT='\033[0;32m'
BLEU='\033[0;34m'
NC='\033[0m' # Pas de couleur

Utilisez ces variables dans vos scripts :

echo -e "${ROUGE}Ceci est du texte rouge${NC}"
echo -e "${VERT}Ceci est du texte vert${NC}"

Avantages de l'utilisation de variables pour la gestion des couleurs :

  • Facile de changer les couleurs dans le script
  • Améliore la lisibilité du code
  • Réduit les erreurs dues à la saisie fréquente des codes de couleur

Combinaison de couleurs et de styles de texte

Ajoutez du gras, du soulignement et d'autres attributs de texte pour créer une sortie attrayante :

Texte en gras :

echo -e "\033[1mCeci est du texte en gras\033[0m"

Texte souligné :

echo -e "\033[4mCeci est du texte souligné\033[0m"

Combinaison de couleurs et de styles :

echo -e "\033[1;31mCeci est du texte rouge en gras\033[0m"

Vous pouvez créer des variables pour ces combinaisons :

ROUGE_GRAS='\033[1;31m'
BLEU_SOULIGNE='\033[4;34m'

echo -e "${ROUGE_GRAS}Texte rouge en gras${NC}"
echo -e "${BLEU_SOULIGNE}Texte bleu souligné${NC}"

Ces techniques vous permettent de créer des scripts Bash visuellement attrayants et informatifs.

Pour plus d'informations sur les scripts Bash, consultez le Manuel GNU Bash.

Bonnes pratiques pour coloriser la sortie Bash

Compatibilité entre différents terminaux

Lors de l'utilisation de couleurs dans les scripts Bash, tenez compte de la compatibilité entre les différents terminaux et systèmes d'exploitation :

  • Utilisez des codes d'échappement ANSI ou des commandes tput, qui fonctionnent sur la plupart des distributions Linux et macOS.
  • Évitez les codes de couleur spécifiques à certains terminaux.
  • Testez vos scripts sur différents systèmes pour vérifier l'affichage des couleurs.
  • Utilisez une bibliothèque de couleurs qui gère les problèmes de compatibilité pour vous.

Voici un exemple de paramétrage de couleur compatible :

if [ -t 1 ]; then
    ROUGE=$(tput setaf 1)
    VERT=$(tput setaf 2)
    RESET=$(tput sgr0)
else
    ROUGE=""
    VERT=""
    RESET=""
fi

echo "${ROUGE}Ceci devrait être rouge sur la plupart des terminaux${RESET}"

Réinitialisation des couleurs pour maintenir la lisibilité

Après avoir utilisé une sortie colorée, il est important de réinitialiser les couleurs à leurs valeurs par défaut :

  • Réinitialisez les couleurs après chaque sortie colorée pour éviter d'affecter le texte ultérieur.
  • Utilisez la commande de réinitialisation à la fin des sections colorées.
  • Utilisez un piège pour réinitialiser les couleurs si le script se termine de manière inattendue.

Voici quelques méthodes pour réinitialiser la couleur du texte et les attributs :

  1. Utilisation du code d'échappement ANSI :

    echo -e "\033[0mCeci réinitialise tous les attributs"
  2. Utilisation de tput :

    echo "$(tput sgr0)Ceci réinitialise également tous les attributs"
  3. Utilisation d'une variable (recommandé pour la cohérence) :

    RESET='\033[0m'
    echo -e "${ROUGE}Texte rouge${RESET} Texte normal"

En suivant ces pratiques, vous pouvez créer des scripts avec une sortie colorée qui fonctionnent sur différents systèmes et maintiennent la lisibilité tout au long de l'exécution.

Approches alternatives pour coloriser la sortie Bash

Utilisation de 'printf' pour une sortie colorée formatée

La commande printf offre plus de contrôle sur le formatage de la sortie que echo. Elle est utile pour le formatage des couleurs dans les scripts Bash.

Avantages de printf par rapport à echo :

  • Meilleur contrôle du formatage de la sortie
  • Comportement cohérent entre les versions de Bash
  • Permet de spécifier la largeur des champs et l'alignement

Exemples de formatage de couleur avec printf :

ROUGE='\033[0;31m'
VERT='\033[0;32m'
NC='\033[0m'

printf "${ROUGE}%-20s${NC} ${VERT}%s${NC}\n" "Erreur:" "Fichier non trouvé"
printf "${ROUGE}%-20s${NC} ${VERT}%s${NC}\n" "Avertissement:" "Espace disque faible"

Ce code crée une sortie alignée et colorée pour les messages d'erreur et d'avertissement.

Bibliothèques de couleurs tierces

Certaines bibliothèques de couleurs tierces sont disponibles pour Bash, offrant des fonctions de couleur prédéfinies et une syntaxe plus simple.

Bibliothèques de couleurs disponibles :

  • Bash-it : Une collection de commandes et scripts Bash communautaires
  • bashcopy : Une petite bibliothèque pour la sortie colorée dans les scripts Bash
  • ansi : Une bibliothèque pour les codes d'échappement ANSI dans les scripts shell

Avantages de l'utilisation de bibliothèques externes :

  • Fonctions de couleur prédéfinies pour une mise en œuvre rapide
  • Incluent souvent des options de formatage supplémentaires
  • Peuvent gérer les problèmes de compatibilité des terminaux

Inconvénients de l'utilisation de bibliothèques externes :

  • Dépendance supplémentaire pour vos scripts
  • Peut être excessif pour des besoins de couleur simples
  • Problèmes de compatibilité possibles avec différentes versions de Bash

Exemple utilisant la bibliothèque 'colors.sh' :

source colors.sh

echo "$(red "Ceci est du texte rouge")"
echo "$(green "Ceci est du texte vert")"

Bien que ces bibliothèques puissent simplifier l'utilisation des couleurs, considérez vos besoins et la complexité du script avant de décider de les utiliser.

Pour plus d'informations sur printf, vous pouvez consulter le Manuel GNU Bash.

Pour explorer les bibliothèques de couleurs Bash, consultez Bash-it sur GitHub.

Résolution des problèmes de couleur dans Bash

Correction des codes de couleur non interprétés

Les codes de couleur peuvent ne pas fonctionner dans les scripts Bash pour ces raisons :

  • Le terminal ne prend pas en charge les codes de couleur
  • L'option -e est manquante lors de l'utilisation d'echo
  • Syntaxe incorrecte dans les codes de couleur
  • Le support des couleurs est désactivé dans le terminal

Moyens de résoudre les problèmes de séquences de couleurs :

  1. Vérifier le support des couleurs du terminal :

    if [ -t 1 ]; then
    echo "Le terminal prend en charge les couleurs"
    else
    echo "Le terminal ne prend pas en charge les couleurs"
    fi
  2. Utiliser echo avec l'option -e :

    echo -e "\033[31mTexte rouge\033[0m"
  3. Vérifier la syntaxe du code de couleur :

    
    # Bonne syntaxe
    echo -e "\033[31mTexte rouge\033[0m"

Mauvaise syntaxe

echo -e "\033[31Texte rouge\033[0m"


4. Utiliser tput pour une meilleure compatibilité :
```bash
rouge=$(tput setaf 1)
reset=$(tput sgr0)
echo "${rouge}Texte rouge${reset}"

Correction des différences de couleur entre les terminaux

Les terminaux peuvent afficher les couleurs différemment. Pour corriger ces différences :

  1. Utilisez des codes de couleur ANSI standard (30-37 pour le premier plan, 40-47 pour l'arrière-plan)

  2. Testez vos scripts sur différents terminaux

  3. Utilisez des bibliothèques de couleurs qui corrigent les problèmes de compatibilité

  4. Ajoutez une option pour désactiver les couleurs dans vos scripts :

utiliser_couleur=true

if [ "$utiliser_couleur" = true ]; then
    ROUGE='\033[0;31m'
    VERT='\033[0;32m'
    NC='\033[0m'
else
    ROUGE=''
    VERT=''
    NC=''
fi

echo -e "${ROUGE}Ceci pourrait être rouge${NC}"
echo -e "${VERT}Ceci pourrait être vert${NC}"
  1. Utilisez tput pour une sortie plus cohérente :
if [ -t 1 ]; then
    ROUGE=$(tput setaf 1)
    VERT=$(tput setaf 2)
    RESET=$(tput sgr0)
else
    ROUGE=""
    VERT=""
    RESET=""
fi

echo "${ROUGE}Ceci devrait être rouge de manière cohérente${RESET}"
echo "${VERT}Ceci devrait être vert de manière cohérente${RESET}"

Ces méthodes peuvent vous aider à résoudre les problèmes de couleur et à créer une sortie colorée cohérente dans vos scripts Bash sur différents terminaux.

Pour plus d'informations sur le support des couleurs des terminaux, consultez la documentation des codes d'échappement ANSI.