【问题标题】:Weird control characters from Gradle in Windows 10Windows 10 中来自 Gradle 的奇怪控制字符
【发布时间】:2017-12-31 06:21:53
【问题描述】:

在控制台中,自从切换到 Windows 10 后,当我从 CMD 运行时,我会从 Gradle 获得“时髦”的输出。

[0K
[0K
[2A[1m<==-----------> 18% EXECUTING [9s][m[34D[1B[1m> :compileScala[m[15D[1B[2A[1m<==-----------> 18% EXECUTING [10s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [11s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [12s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [13s][m[35D[2B[2A[1m<==-----------> 18% EXECUTING [14s][m[35D[2B[2Athere were four feature warnings; re-run with -feature for details
four warnings found

我想这是某种疯狂的控制字符,Gradle 试图明智地为其输出着色,而 Windows 正在解释错误。 PowerShell 和 SBT 工作正常 - 但将控制台“属性”设置从 PowerShell 复制到 CMD 并不能解决问题。

有人解决了吗?

2018-01-28 更新这也发生在我的 Jenkins/Alpine/Docker 设置中,它位于 OSX/macOS/whatnot 之上。不再只是窗户。

...但是...这不会发生在 Surface 笔记本电脑上工作给了我...超级奇怪。 Whatevs gradlew --console=plain 对我来说很好用。

【问题讨论】:

  • CMD 在运行外部程序时恢复原来的控制台模式,这在技术上是正确的做法。显然 PowerShell 不这样做,所以如果你从 PowerShell 启动 CMD,虚拟终端转义应该可以工作——直到有人在 PowerShell 中修复了这个错误。
  • 这里的主要错误在 Gradle 中。如果它依赖于虚拟终端支持,那么它应该在控制台中通过GetConsoleMode 获取当前模式,然后在ENABLE_VIRTUAL_TERMINAL_PROCESSING 标志中启用它,并通过SetConsoleMode 设置新模式。如果此操作失败,则不支持 VT 模式。它要么是旧版本的 Windows,要么是设置了使用旧版控制台的选项。

标签: windows gradle cmd windows-10 windows-console


【解决方案1】:

我已经在 Git BASH shell 中看到了这种情况,它是 Git For Windows 的一部分。对我来说,解决方案是将 TERM 设置为 cygwin。这修复了输出,而不会引入任何处理退格的问题。

export TERM=cygwin

我还尝试了 xterm、xterm-256color、ansi 和 vt100。 cygwin 术语对我来说是最可靠的。我现在在 Windows 终端中运行 \usr\bin\bash.exe,到目前为止它运行良好。

【讨论】:

  • 这似乎可行,但我不明白为什么 Windows 终端环境需要 cygwin TERM 的逻辑。我猜想这是 cygwin kruft 的奥秘之一。
  • 如果你在 windows 中使用 git bash。编辑 git\etc\bash.bashrc 中的文件并将行 export TERM=cygwin 添加到文件的末尾,这样您就不必每次运行终端时都键入此命令
  • @Ali 上面的建议在我将它添加到我的 Windows 主目录中的 .bash_profile 文件时对我有用。
  • @xpusostomos 它可能正在尝试这样做:en.wikipedia.org/wiki/ANSI_escape_code
【解决方案2】:

要在 Windows 10 上解决此问题,请创建一个新的 DWORDHKEY_CURRENT_USER\Console\VirtualTerminalLevel 设置为 1。请参阅this 了解更多信息。

【讨论】:

    【解决方案3】:

    我猜你可以在 gradle 命令行中通过 --console plain 来禁用富控制台,这可能是“时髦”字符的原因

    https://docs.gradle.org/current/userguide/gradle_command_line.html

    【讨论】:

    • 在 win 10 下的 powershell 中的 Gradle 2.6 会产生正确的行为,但 gradle 4.1 不会。
    • 是的,当我在 Windows 上通过 git bash 运行 Gradle 时,也会出现类似的奇怪现象。 Gradle 在 Windows 上的普通 DOS 终端中运行良好。正如我所说,您可以使用--console plain 来停止特殊字符
    • 它似乎有效。输出要好得多,但我无法看到使用 export TERM=cygwin 的百分比,就像下面提到的 Mark 似乎给出了更好的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多