Create a function in a bash shell or script:
color()(set -o pipefail;"$@" 2>&1>&3|sed $'s,.*,\e[31m&\e[m,'>&2)3>&1
Use it like this:
$ color command -program -args
It will show the command’s stderr in red.
Keep reading for an explanation of how it works. There are some interesting features demonstrated by this command.
color()...— Creates a bash function called color.set -o pipefail— This is a shell option that preserves the error return code of a command whose output is piped into another command. This is done in a subshell, which is created by the parentheses, so as not to change the pipefail option in the outer shell."$@"— Executes the arguments to the function as a new command."$@"is equivalent to"$1" "$2" ...2>&1— Redirects thestderrof the command tostdoutso that it becomessed‘sstdin.>&3— Shorthand for1>&3, this redirectsstdoutto a new temporary file descriptor3.3gets routed back intostdoutlater.sed ...— Because of the redirects above,sed‘sstdinis thestderrof the executed command. Its function is to surround each line with color codes.$'...'A bash construct that causes it to understand backslash-escaped characters.*— Matches the entire line.\e[31m— The ANSI escape sequence that causes the following characters to be red&— Thesedreplace character that expands to the entire matched string (the entire line in this case).\e[m— The ANSI escape sequence that resets the color.>&2— Shorthand for1>&2, this redirectssed‘sstdouttostderr.3>&1— Redirects the temporary file descriptor3back intostdout.