o código de cores do eco parou de funcionar no leão da montanha


8

O texto a seguir produziu texto com cores diferentes no terminal no Lion, mas não no Mountain Lion. Por quê? O que pode ser feito para ecoar em cores no Mountain Lion?

echo -e "Some text \e[0;32m in color \e[0m no more color";

Na montanha Lion, apenas imprime como se -e não tivesse sido dado como argumento para ecoar.


1
Estranhamente, o eco do homem não menciona a bandeira -e, mesmo que a bandeira -e funcione. Pelo menos para \ n
Hugo

1
O manage for echo descreve o /bin/echocomando externo, não o eco que está embutido no shell que você está usando (por exemplo, aquele nomeado na #!linha na parte superior do seu script). Você precisa consultar a página de manual do shell que está usando (provavelmente o bash ) para ver quais opções seu eco interno suporta.
31812 Chris Johnsen

Respostas:


13

Conforme descrito na seção Application Usage da descrição POSIX do comando echo , as -nseqüências de opção e escape não são muito portáteis (devido ao suporte diferente nos vários ramos da árvore genealógica do Unix).

O printfcomando (que, como eco , também é incorporado à maioria dos shells e está disponível como um comando externo) é padronizado com mais confiabilidade (embora a sintaxe não seja a mesma; por exemplo, você precisa observar %no primeiro argumento e vários argumentos são não se juntou automaticamente a um espaço):

printf 'Some text \e[0;32m in color \e[0m no more color\n'

printf '%s \e[0;32m%s\e[0m %s\n' 'Some text' 'in color' 'no more color'

Obrigado Chris, aceitou sua resposta, pois era melhor do que a que encontrei.
23712 Hugo

15

O problema era que o código de escape \ e foi removido na versão do eco do leão da montanha. Altere \ e para \ 033 e ele funcionará.


Este site é válido para Yosemite, aplausos muito apreciada ..
reevesy

Isso também é válido para a Sierra, apesar de man bashlistar \ecomo uma fuga válida.
Jim Davis

4

Uma maneira confiável de fazer isso é através do tput:

RED=`tput setaf 1`
GREEN=`tput setaf 2`
NOCOLOR=`tput sgr0`

echo "Some text ${RED}in red color${NOCOLOR} no more color"

1
Esta é uma maneira muito clara e inteligente de configurar cores!
Michael Eakins
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.