堆栈测试输出在 MINGW64 上出现乱码

Stack test output garbled on MINGW64

我 运行宁 GHC 在 Windows 10 上使用 Stack,并在我的大部分日常工作流程中使用 Git Bash (MINGW64)。这包括使用 GHC 和 GHCi,它们通常工作正常。

然而,当我从 MINGW64 运行 stack test 时,输出被 ANSI 颜色代码乱码:

$ stack test
UC-0.1.0.0: test (suite: UC-test)

[?25lSorting Group 1:

[2K[1F  prop1: [[92mOK, passed 100 tests[0m]

[2K[1F  prop2: [[92mOK, passed 100 tests[0m]

         Properties  Total
 Passed  [92m2[0m           [92m2[0m
 Failed  0           0
 Total   [92m2[0m           [92m2[0m
[?25h

奇怪的是,如果我从正常的 Windows 控制台 (cmd) 运行 stack test,它会正确显示:

我想继续使用我的 (Git) Bash 控制台,而不是必须使用两个单独的控制台 windows,所以:

我也试过 运行 stack --color never test 的变体,但似乎没有任何区别。

可以像这样将参数传递给测试可执行文件:

stack test --test-arguments "--plain"

--plain 是测试框架中删除颜色的选项,而 --color never 来自 tasty.

我在 Windows 10,Git 2.17.0 上遇到了同样的问题,MINGW64 作为 Git Bash shell。在 运行 "php artisan tinker" 之前,颜色都很好,之后颜色停止,突然所有输出都被 ANSI 颜色代码弄乱了。

我的解决方案原来是(令我惊讶的是它起作用了): 运行 Bash inside Git Bash shell.

之前:

$ php artisan tinker
?[34mPsy Shell v0.7.2 (PHP 7.1.11 ΓÇö cli) by Justin Hileman?[39m
>>> exit
?[37;41mExit:  Goodbye.?[39;49m
$

之后:

$ bash
$ php artisan tinker
Psy Shell v0.7.2 (PHP 7.1.11 — cli) by Justin Hileman
>>> exit
Exit:  Goodbye.
$

这确实是一种变通方法,但确实有效。也许这是实际潜在问题的线索。终端类型似乎无关紧要(xterm、xterm-256 等)都试过了,差别不大。