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?
Best Answer
ls
only outputs colors when it is writing to a terminal. When you specify a command forssh
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: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: