8

The following produced text with different color on terminal in Lion, but not in Mountain Lion. Why? What can be done to echo in color on Mountain Lion?

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

In mountain Lion it just prints as if -e wasn't given as an argument to echo.

2
  • 1
    Strangely, man echo does not mention the -e flag, even though the -e flag works. At least for \n
    – Hugo
    Dec 13, 2012 at 16:33
  • 1
    The manage for echo describes the /bin/echo external command, not the echo that is built into the shell that you happen to be using (e.g. the one named in the #! line at the top of your script). You need to consult the manpage for the shell that you are using (probably bash) to see what options its internal echo supports. Dec 14, 2012 at 5:31

3 Answers 3

13

As described in the Application Usage section of the POSIX description of the echo command, the -n option and escape sequences are not very portable (due to different support in the various branches of the Unix family tree).

The printf command (which, like echo, is also builtin to most shells, and available as an external command) is more reliably standardized (though the syntax is not the same; e.g. you need to watch for % in the first argument, and multiple arguments are not automatically joined with a space):

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'
1
  • Thanks Chris, accepted your answer since it was better than the one I found.
    – Hugo
    Dec 19, 2012 at 9:09
15

The problem was that the escape code \e has been removed in mountain lion's version of echo. Change \e to \033 and it will work.

2
  • This site holds true for Yosemite, cheers much appreciated..
    – reevesy
    Jan 13, 2015 at 16:36
  • Holds true for Sierra as well, despite man bash listing \e as a valid escape.
    – Jim Davis
    Oct 18, 2017 at 16:05
4

A reliable way to do this is through tput:

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

echo "Some text ${RED}in red color${NOCOLOR} no more color"
1
  • 1
    This is a very clear and clever way to setup colors! Apr 25, 2019 at 17:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .