I'd like to enable colored text output on SSH one-liner commands, but I can't seem to get it to work on OS X, Ubuntu 14.10, or OpenSUSE 12.2.

If I ssh into a server and type, say, ls --color=auto in the prompt, it works just fine, showing directories, symlinks, and regular files in different colors, however, if I put the command in an ssh one-liner on the same system: ssh user@host "ls --color=auto", the output isn't colored.

Typing echo $TERM gives me xterm-256color whether or not I put it in a one-liner statement.

This is mainly for color-coding errors and warnings on remote builds, but it would be nice to get it enabled for everything.

Any advice?

ssh user@host "ls --color=auto"

ls only outputs colors when it is writing to a terminal. When you specify a command for ssh to run on the remote host, ssh doesn't allocate a TTY (terminal interface) by default. So, when you run the above command, ssh doesn't allocate a terminal on the remote system, ls sees it's not writing to a terminal, and it doesn't output colors.

You can run ssh with the -t option to make it allocate a terminal. The following should print colors:

ssh -t user@host "ls --color=auto"

If ssh is being run non-interactively, and is own local output isn't going to a terminal, then it will ignore a single -t flag. In this case, you can specify -t more than once to force ssh to allocate a TTY on the remote system:

ssh -tt user@host "ls --color=auto"
| improve this answer | |

I'd suggest to use --color=always in case of ls, to force color. And to have colors in other apps, thatt support coloring, but do not support for --color=value, you can also try to ssh <host> -t "TERM=${TERM} <command>"

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.