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?

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"

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.