La commande d'écho avec l'option couleur dans le script et la commande fonctionne différemment

15

Si je cours echo -e "\e[1;31mThis is red text\e[0m"en ligne de commande, il imprime du texte rouge.

Cependant, si j'utilise l'écrire dans un fichier script test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

courir $ sh test.sh

Il imprime -e \e[1;31mThis is red text\e[0m

Pourquoi agissent-ils différemment?

qingfeng
la source

Réponses:

29

echoest un shell intégré à Bash et dash ( /bin/sh). Si vous exécutez à echopartir de la ligne de commande, vous utilisez la fonction intégrée Bash, si vous exécutez votre script shell avec shvous, vous utilisez la fonction intégrée Dash.

La version de tiret de echone connaît pas l' -eoption, mais affiche simplement quoi que ce soit textuellement sans aucune manipulation spéciale pour les \séquences.

Soit utiliser Bash pour exécuter votre script shell, soit utiliser à la /bin/echoplace de echo:

/bin/echo -e "\e[1;31mThis is red text\e[0m"

Pour éviter les problèmes avec différentes versions de echovous pouvez utiliser à la printfplace. Contrairement à echo printfinterprète toujours les \séquences mais n'ajoute pas automatiquement un saut de ligne à la fin, vous devez donc ajouter \nà la fin si vous le souhaitez.

Comme certaines versions de printfne comprennent pas, \evous devez utiliser à la \033place:

printf "\033[1;31mThis is red text\033[0m\n"
Florian Diesch
la source
Ça marche. /bin/echoavec tiret ( /bin/sh) et bash; echoavec bash ou les ./tes.shdeux fonctionne correctement. Le code ci-dessous fonctionne bashuniquement avec . if [$ UID -ne 0]; puis écho "Pas utilisateur root" sinon écho "Utilisateur root" fi
qingfeng
1

Ne l'exécutez pas avec sh test.sh, il imprime le texte en blanc comme vous l'avez dit .. Après avoir créé le script, rendez-le exécutable en exécutant,

sudo chmod +x /path/test.sh

entrez la description de l'image ici

Exécutez le script avec sudo, comme sudo ./test.shou les ./test.shdeux fonctionnent.

Ou

Exécutez le script avec bash,

bash /path/test.sh
Avinash Raj
la source
Je cours chmod a+x test.sh, il imprime le texte en couleur lue. Quelle est la différence. ./test.shdevrait être égal à sh test.shce qui s'est passé sous Linux?
qingfeng
vous n'avez pas eu à utiliser sh lors de l'exécution du script, vous avez créé le script avec l'interpréteur bash #! /bin/bash, vous devez donc utiliserbash test.sh
Avinash Raj
Et .signifie également le répertoire courant.
Avinash Raj
Voir la capture d'écran, mon fichier test.sh est placé à l'intérieur du bureau.J'ai donc déménagé dans ce dossier de bureau, puis je lance ./test.sh, enfin cela fonctionne.Veuillez garder à l'esprit d'exécuter le script .uniquement s'il a été présenté dans le répertoire actuel.
Avinash Raj
1

Cela nécessite la commande correcte dans le format correct est tout.

Déclaration d'écho appropriée: echo "Hello World!"

Déclaration d'écho appropriée avec 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 facilement déroutantes. =)

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? LOL

hwac121
la source