eshell下输出特殊字符问题

有一个命令行工具,在终端下执行没问题。但是在eshell执行,售出一行额外的特殊字符,之后就卡住了。有人知道为什么吗?

Screenshot 2023-05-31 at 22.27.02

如果用 shell-command-to-string 执行同样的命令,没有特殊字符,可以得到期望的输出结果。

像是终端的颜色代码。你试试 git externals --no-color 或者在 emacs -Q 上试试 eshell。

emacs -Q输出同样结果。 --no-colorunkown flag

  1. git 版本多少?
  2. externals 是哪里来的?
  3. --no-color 要放在后面。也可以试试 --color=nerver。看看 git log -1 --color=nervergit log -1 --color=always 有没有区别
  1. git: 2.31.1
  2. externals: 内部用go开发的, 感觉是的拦截了git的输出
  3. --color=never vs --color=always 有区别的,后者有颜色输出。 eshell 中显示没问提。

你可以试试在 eshell-preoutput-filter-functions 加入一个过滤函数,把终端色彩代码删掉,或者转换成 text property (参考 xterm-color-filter,也许可以直接用)。

既然是内部工具,是不是可以去了解一下命令输出了什么?