我可以阻止 Git 使用 XTerm 转义序列吗?

问题描述 投票:0回答:1

我正在编写一些代码,其中 MATLAB 查询 Git 标签:

[status, cmdout] = system("TERM=xterm; git tag -l")

在我最初编写代码的 Windows 11 分区上,这工作正常,我得到了一个以换行符分隔的标签列表。然而,在我的 Ubuntu 分区上,命令输出是

'[?1h=
     mytag[m
     
     [K[?1l>'

mytag
是唯一存在的标签。在W11上,输出只是
mytag
) 解码后,显然是

'\x1B[?1h\x1B=\x13mytag\x1B[m\x13\x10\x13\x1B[K\x1B[?1l\x1B>'

'<ESC>[?1h<ESC>=\rmytag<ESC>[m\r\n\r<ESC>[K<ESC>[?1l<ESC>>'

我发现这些

<ESC>[...
序列是用于格式化和文本颜色的转义序列。其中大多数是 ANSI 转义序列,但是
<ESC>=
<ESC>>
似乎是 XTerm 特定的。

起初我以为

bash
cmd
将输出返回到 MATLAB* 的方式不同,但我通过编写自己的程序来测试这一点,该程序用彩色字体打印“hello, world”并从 MATLAB 调用它在这两种操作系统中,ANSI 序列也按字面意思显示在 Windows 上。所以看起来是 Git 的行为不同,尽管它可能是其他东西。

我已经开始研究正则表达式来删除所有这些内容,但是 Git 插入的所有回车符破坏了我的一堆代码(它使用了许多 Git 命令。不要问为什么),我想我'除非我弄清楚如何让 Git 打印出与 Windows 上相同的简单输出,否则最终会创建一些非常脆弱且丑陋的代码。 如果我没有在 Git 命令前添加

TERM=xterm
前缀,则默认终端模式为
dumb
,您会 认为 正是我想要的。但是,如果您这样做,Git 会打印出警告

WARNING: terminal is not fully functional
Press RETURN to continue

并且看起来 MATLAB

system
命令无法用于回答此提示,而且该提示仅出现在某些命令上,最后 Git 仍然在
git tag -l 中包含一个 ANSI 序列(以及那些该死的换行符) 
即使我使用哑模式也会输出,所以无论如何都没用。

那么 - 是否可以阻止 Git 打印除纯文本之外的任何内容,但不需要手动确认某些命令?为什么所有这些在 Windows 上都能如此轻松地完成 - Git 是否有问题? 非常欢迎任何有关为什么我在 Ubuntu 和 Windows 之间出现不同行为的解释、解决此问题的更好方法或任何可能有帮助的内容。

* 这就是它的工作原理,对吗?

system
启动
bash
/
cmd
进程,向其提供命令字符串,然后收集其输出?

bash git matlab ansi-escape xterm
1个回答
0
投票

我会使用

--no-color
选项:

[status, cmdout] = system("git tag -l --no-color")
© www.soinside.com 2019 - 2024. All rights reserved.