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

11

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

No entanto, se eu usar, escreva-o no arquivo de script test.sh

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

execute $ sh test.sh

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

Por que eles agem diferentemente?

    
por qingfeng 14.03.2014 / 12:55

2 respostas

21

echo é um shell embutido no Bash e no traço ( /bin/sh ). Se você executar echo a partir da linha de comando que estiver usando o Bash incorporado, se você estiver executando seu script de shell com sh , estará usando o Dash embutido.

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

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

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

Para evitar problemas com versões diferentes de echo , convém usar printf . Em contraste com echo printf sempre interpreta \ sequencias mas não adiciona automaticamente um avanço de linha no final, então você tem que acrescentar \n no final se você quiser um.

Como algumas versões de printf não entendem \e , você deve usar 3 :

printf "3[1;31mThis is red text3[0m\n"
    
por Florian Diesch 14.03.2014 / 13:19
1

Não execute com sh test.sh , 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

Execute o script com sudo , como sudo ./test.sh ou ./test.sh , ambos funcionarão.

Ou

Execute o script com bash ,

bash /path/test.sh
    
por Avinash Raj 14.03.2014 / 13:08