Polecenie echa z opcją koloru w skrypcie i polecenie działa inaczej

15

Jeśli uruchomię się echo -e "\e[1;31mThis is red text\e[0m"w linii poleceń, drukuje czerwony tekst.

Jeśli jednak użyję, napisz to w pliku skryptu test.sh

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

biegać $ sh test.sh

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

Dlaczego działają inaczej?

qingfeng
źródło

Odpowiedzi:

29

echojest powłoką wbudowaną w Bash i dash ( /bin/sh). Jeśli uruchamiasz echoz wiersza poleceń, używasz wbudowanego Bash, jeśli uruchamiasz skrypt powłoki przy shużyciu wbudowanego Dash.

Wersja Dash echonie zna tej -eopcji, ale po prostu wypisuje wszystko dosłownie, bez specjalnej obsługi \sekwencji.

Użyj Bash, aby uruchomić skrypt powłoki lub użyj /bin/echozamiast echo:

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

Aby uniknąć problemów z różnymi wersjami, echomożesz użyć printfzamiast tego. W przeciwieństwie do echo printfzawsze interpretuje \sekwencje, ale nie dodaje automatycznie linii na końcu, więc musisz dołączyć \nna końcu, jeśli chcesz.

Ponieważ niektóre wersje printfnie rozumieją \e, powinieneś użyć \033zamiast tego:

printf "\033[1;31mThis is red text\033[0m\n"
Florian Diesch
źródło
To działa. /bin/echoz dash ( /bin/sh) i bash; echoz bash lub ./tes.shoba działają poprawnie. Poniższy kod działa bashtylko z . jeśli [$ UID -ne 0]; następnie echo „Nie root użytkownik” inaczej echo „Użytkownik root” fi
qingfeng
1

Nie uruchamiaj go sh test.sh, drukuje tekst w kolorze białym, jak powiedziałeś. Po utworzeniu skryptu, uruchom go,

sudo chmod +x /path/test.sh

wprowadź opis zdjęcia tutaj

Uruchom skrypt z sudo, jak sudo ./test.shlub ./test.shoba będą działać.

Lub

Uruchom skrypt za pomocą bash,

bash /path/test.sh
Avinash Raj
źródło
Uruchamiam chmod a+x test.sh, drukuje tekst w kolorze do odczytu. Jaka jest różnica. ./test.shpowinno być równe sh test.shCo się stało w systemie Linux?
qingfeng
nie musiałeś używać sh podczas uruchamiania skryptu, utworzyłeś skrypt za pomocą interpretera bash, #! /bin/bashwięc musisz użyćbash test.sh
Avinash Raj
A także .oznacza bieżący katalog.
Avinash Raj
Zobacz zrzut ekranu, mój plik test.sh jest umieszczony wewnątrz pulpitu, więc przeniosłem się do tego folderu na pulpicie, a następnie uruchamiam ./test.sh, w końcu działa. Pamiętaj, aby uruchomić skrypt .tylko wtedy, gdy był prezentowany w bieżącym katalogu.
Avinash Raj
1

To wszystko wymaga poprawnego polecenia w poprawnym formacie.

Prawidłowa instrukcja echa: echo "Hello World!"

Prawidłowa instrukcja echa kolorem: echo "\e[1;31mHello World!\e[0m"

Dodanie koloru do skryptu bash jest jedną z tych bardzo prostych, ale łatwo mylących rzeczy. =)

Ta strona może pomóc ci to wszystko wyjaśnić. Często używam tego jako odniesienia, bo kto dobrze pamięta wszystkie prawidłowe kody kolorów? lol

hwac121
źródło