Si je lance echo -e "\e[1;31mThis is red text\e[0m"
dans la ligne de commande, cela affichera du texte rouge.
Cependant, si j'utilise l'écrire dans le fichier script test.sh
#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"
lancer $ sh test.sh
Il imprime -e \e[1;31mThis is red text\e[0m
Pourquoi ils agissent différemment?
echo
est un shell intégré dans Bash et Dash (/bin/sh
). Si vous exécutez echo
à partir de la ligne de commande, vous utilisez la commande intégrée Bash, si vous exécutez votre script Shell avec sh
name__, vous utilisez la commande intégrée Dash.
La version avec tiret de echo
ne connaît pas l’option -e
mais ne fait que générer quoi que ce soit verbatim sans traitement spécial pour les séquences \
.
Utilisez Bash pour exécuter votre script Shell ou utilisez /bin/echo
au lieu de echo
name__:
/bin/echo -e "\e[1;31mThis is red text\e[0m"
Pour éviter les problèmes avec les différentes versions de echo
name__, vous pouvez utiliser plutôt printf
name__. Contrairement à echo
printf
interprète toujours les séquences \
mais n'ajoute pas automatiquement de saut de ligne à la fin, vous devez donc ajouter \n
à la fin si vous en voulez un.
Certaines versions de printf
ne comprenant pas \e
, vous devez utiliser \033
à la place:
printf "\033[1;31mThis is red text\033[0m\n"
Ne le lancez pas avec sh test.sh
, il affiche le texte en blanc, comme vous l'avez dit. Après la création du script, rendez-le exécutable en exécutant,
Sudo chmod +x /path/test.sh
Exécutez le script avec Sudo
, comme Sudo ./test.sh
ou ./test.sh
, les deux fonctionneront.
Ou
Exécutez le script avec bash
,
bash /path/test.sh
Cela nécessite la commande correcte dans le format correct est tout.
Déclaration echo correcte: echo "Hello World!"
Déclaration echo correcte avec la couleur: echo "\e[1;31mHello World!\e[0m"
Ajouter de la couleur à un script bash est l’une de ces choses très simples mais qui prêtent à confusion. =)
Ce site pourrait vous aider à tout expliquer clairement. Je l'utilise souvent comme référence car, qui peut se souvenir de tous les codes de couleur corrects, n'est-ce pas? LOL