防止终端输出中的 ANSI 转义序列

防止终端输出中的 ANSI 转义序列

当我通过 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'

相关内容