让 SSH 单行命令显示颜色

让 SSH 单行命令显示颜色

我想在 SSH 单行命令上启用彩色文本输出,但似乎无法让它在 OS X、Ubuntu 14.10 或 OpenSUSE 12.2 上运行。

如果我通过 ssh 进入服务器并ls --color=auto在提示符中输入内容,它可以正常工作,以不同的颜色显示目录、符号链接和常规文件,但是,如果我将命令放在同一个系统上的 ssh 单行命令中:ssh user@host "ls --color=auto",则输出没有颜色。

输入后echo $TERM我就能知道xterm-256color是否将其放在一行语句中。

这主要是为了对远程构建中的错误和警告进行颜色编码,但最好能为所有内容启用它。

有什么建议吗?

答案1

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

ls仅在写入终端时输出颜色。当您指定要ssh在远程主机上运行的命令时,默认情况下 ssh 不会分配 TTY(终端接口)。因此,当您运行上述命令时,ssh 不会在远程系统上分配终端,ls 会发现它没有写入终端,并且不会输出颜色。

您可以使用选项运行 ssh,-t使其分配一个终端。以下内容应打印颜色:

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

如果ssh以非交互方式运行,并且其本地输出不会发送到终端,则它将忽略单个-t标志。在这种情况下,您可以-t多次指定以强制 ssh 在远程系统上分配 TTY:

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

答案2

我建议--color=always在 ls 的情况下使用,以强制颜色。而要在其他支持着色但不支持的应用程序中拥有颜色--color=value,您也可以尝试ssh <host> -t "TERM=${TERM} <command>"

相关内容