如何关闭 Bash 的 ANSI 转义序列?

如何关闭 Bash 的 ANSI 转义序列?

我正在运行 Jest,输出如下:打印一行(用于测试),然后擦除它,然后打印另一行。

但是,如果我使用循环来执行测试(使用expect),则无法查看完整的测试列表。 (选择器等)。

我也尝试过:

jest foo.js &> result.txt

但看来笑话可以确定它不是终端类型,因此不会再输出这些行。

我还研究了选项jest,但没有找到任何可行的方法。

所以我认为一个黑客可以是:如果终端没有这些 ANSI 转义序列支持(擦除一行等)怎么办,那么输出必须是一行又一行。

有办法做到吗?环境是 macOS Sonoma 上的终端。

答案1

只需告诉您的终端不支持此类功能,例如将

TERM=vanilla jest foo.js

或者在脚本开头设置环境变量(请记住export:所有子进程都需要使用该环境变量)。看https://invisible-island.net/ncurses/terminfo.ti.html有关各种终端的描述。

一个好的程序会检查终端,并仅在终端支持时才添加转义码。不幸的是(正如您在这个 stackoverflow 站点中看到的许多答案),许多程序员很懒,无论如何都会发送转义代码,而不查询终端功能。

注意:还有一些实用程序可以删除 ansi 序列,但我不记得名称了。

相关内容