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)
我真正想做的是关闭这些转义序列。这是可以在会话开始时在命令外壳上完成的事情吗?或者除了过滤输出之外别无他法?
大多数(如果不是全部)情况下,*nix 命令会打印彩色输出,而无需用户通过选项专门要求它,这涉及别名。事实上,许多 Linux 发行版都ls
在grep
全局/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,但我还没有尝试过)(取自此处):
命令的完整路径名:/bin/ls
命令替换:$(which ls)
内置命令:command ls
双引号:"ls"
单引号:'ls'
反斜杠字符:\ls
如果您在软件中使用这些方法之一,则不必担心转义序列。
归档时间: |
|
查看次数: |
5418 次 |
最近记录: |