Comando eco com opção de cor no script e comando funciona de maneira diferente

15

Se eu corro echo -e "\e[1;31mThis is red text\e[0m"na linha de comando, ele imprime texto em vermelho.

No entanto, se eu usá-lo no arquivo de script test.sh

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

corre $ sh test.sh

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

Por que eles agem de maneira diferente?

qingfeng
fonte

Respostas:

29

echoé um shell embutido no Bash e dash ( /bin/sh). Se você executa a echopartir da linha de comando, está usando o Bash built-in, se está executando seu shell script com sho Dash embutido.

A versão de traço de echonão conhece a -eopção, mas apenas produz qualquer coisa literalmente sem nenhum tratamento especial para \sequências.

Use o Bash para executar seu script de shell ou use em /bin/echovez de echo:

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

Para evitar os problemas com diferentes versões, echovocê pode querer usar printf. Ao contrário de echo printfsempre interpreta \seqüências, mas não adiciona automaticamente um avanço de linha no final, portanto você deve anexá \n-lo ao final, se desejar.

Como algumas versões printfdo não entendem, \evocê deve usar \033:

printf "\033[1;31mThis is red text\033[0m\n"
Florian Diesch
fonte
Funciona. /bin/echocom dash ( /bin/sh) e bash; echocom bash ou ./tes.shambos funcionam corretamente. O código abaixo funciona bashapenas com . se [$ UID -ne 0]; then echo "Não usuário root" else echo "Usuário Root" fi
Qingfeng
1

Não o execute sh test.sh, ele imprime o texto na cor branca, como você disse. Depois de criar o script, torne-o executável executando,

sudo chmod +x /path/test.sh

insira a descrição da imagem aqui

Execute o script com sudo, like sudo ./test.shou ./test.shambos funcionarão.

Ou

Execute o script com bash,

bash /path/test.sh
Avinash Raj
fonte
Eu corro chmod a+x test.sh, ele imprime o texto na cor de leitura. Qual é a diferença. ./test.shdeve ser igual ao sh test.shque aconteceu no linux?
21414 Qingfeng #
você não teve que usar sh durante a execução do script, você criou o roteiro com intérprete festa #! /bin/bashassim que você tem que usarbash test.sh
Avinash Raj
E também .significa diretório atual.
precisa
Se a resposta ajudou de alguma forma ./test.sh, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por favor, poste novamente ..
precisa
1

Isso precisa que o comando correto no formato correto seja tudo.

Declaração de eco adequada: echo "Hello World!"

Declaração de eco adequada com cor: echo "\e[1;31mHello World!\e[0m"

A adição de cores a um script do bash é uma daquelas coisas muito simples, mas facilmente confusas. =)

Este site pode ajudar a explicar tudo claramente para você. Costumo usá-lo como referência porque, quem consegue se lembrar de todos os códigos de cores corretos, certo? ri muito

hwac121
fonte