我想在 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>"