当我通过 PuTTY 在我的 Linux 机器上执行“ls -l”时,它会给出一个干净、颜色漂亮的输出。
但是,当我通过 plink 以编程方式尝试相同操作时,我最终获得了各种控制序列,可能表示那些颜色值。
我是否可以以某种方式设置终端选项,以便它不发送这些额外的颜色序列,而只发出纯文本?
[00mtotal 8956
drwxr-xr-x 8 pradymn users 4096 2010-07-23 12:29 [01;34mtestsb1[00m
drwxr-xr-x 5 pradymn users 4096 2010-07-24 22:49 [01;34mtest1[00m
-rw-r--r-- 1 pradymn users 9143013 2010-07-24 23:03 [00;31mtest1.tar.gz[00m
答案1
这可能与您设置 ls 显示颜色的方式有关。如果您能发布此信息,我们可能会更有帮助。
我建议在您最喜欢的 shell 配置文件 (.bashrc) 中使用以下内容:
alias ls="ls --color=auto"
或者,当你不想要颜色输出时,你可以使用以下方式调用 ls--color=never
答案2
另一种方法是使用安西孔位于控制台和 plink 之间的实用程序,可以动态转换 ANSI 颜色代码:
$ ansicon.exe plink.exe user@host
答案3
补充 Rob 的回答:
ANSI 转义序列必须由终端仿真程序解释(或者通过真实的硬件终端)。PuTTY 是一个程序,既是终端仿真器,又是 SSH 客户端。
但plink
它只是一个用于传输原始二进制数据的 SSH 客户端;它才不是解释 ANSI 序列,只是将它们传递给正在运行的终端。在 Windows 上,终端是Windows 控制台— 而且它也不支持 ANSI。
如果您想从命令行使用 SSH,请尝试 Cygwin 版本的 OpenSSH。PuTTY 也可以从命令行启动。
答案4
对我来说,以下过滤有效:
some-program | perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g'