如何在 Linux 中禁用终端控制转义序列?

Ang*_*elo 5 linux terminal command-line parser

我正在编写与运行busybox Linux 版本的嵌入式设备交互的软件。基本上,我只是向设备发送命令并解析命令的输出。这些命令可以直接在 linux shell 上执行,也可以在设备上运行的内部 CLI 应用程序的命令行上执行。

一切正常,只是输出带有终端控制转义序列。在诸如 teraterm 或 putty 之类的终端应用程序上,这些转义序列可以做一些有用的事情,例如颜色错误红色和其他令人愉快的用户界面的不错功能。

问题是我必须以编程方式解析命令的输出并考虑输出中的“(esc)[2k”之类的东西。

例如,一个典型的发送/接收交互,我发送一个命令,“my-cmd”会像这样......

[send] my-cmd
[receive] my-cmd <esc>[2Kprompt> my-cmd
output of the command
prompt> 
Run Code Online (Sandbox Code Playgroud)

我真正想做的是关闭这些转义序列。这是可以在会话开始时在命令外壳上完成的事情吗?或者除了过滤输出之外别无他法?

ter*_*don 3

大多数(如果不是全部)情况下,*nix 命令会打印彩色输出,而无需用户通过选项专门要求它,这涉及别名。事实上,许多 Linux 发行版都lsgrep全局/etc/bash.bashrc.

这些来自我的 Linux Mint Debian 版本:

$ grep alias /etc/bash.bashrc
    alias ls='ls --color=auto'
    alias grep='grep --colour=auto'
Run Code Online (Sandbox Code Playgroud)

因此,如果您的程序通过 BASH 调用这些命令,那么您正在运行ls --color=auto而不是ls.

您可以通过以下方法绕过 BASH 中的别名(也许还有其他 shell,但我还没有尝试过)(取自此处):

  1. 命令的完整路径名:/bin/ls

  2. 命令替换:$(which ls)

  3. 内置命令:command ls

  4. 双引号:"ls"

  5. 单引号:'ls'

  6. 反斜杠字符:\ls

如果您在软件中使用这些方法之一,则不必担心转义序列。