【问题标题】:Preserve color from piped output保留管道输出的颜色
【发布时间】:2017-01-07 18:56:17
【问题描述】:

我有一个非常简单的 powershell 脚本,它在每一行前面加上一个数字。

function number
{    
    $i = 0;
    foreach($line in $input)
    {
        [string]$i + ":" + $line
        ++$i
    }
}

我希望这个函数保留输入的颜色。例如,如果我执行以下命令,颜色会丢失:

git status -s | number

执行时

git status -s

给我一​​个漂亮的彩色输出。我可以在我的 powershell 函数中进行哪些更改来完成此操作。

请注意,我已经尝试告诉 git 始终使用this question 的答案中的信息输出颜色,所以我认为忽略颜色是我的一面。

这不是 the question this one was previously marked a duplicate of 的副本。

我已经看到了这个问题,这实际上是关于如何防止 MSBuild 写入标准错误而不是标准输出,这会阻止颜色在这种情况下出现。关于那个问题和这个问题唯一相似的是标题。那里的另一个答案(使用 HTML 转换)不适用于此处,因为这需要将数据写入控制台而不是通过管道传输。

【问题讨论】:

    标签: powershell terminal ansi-colors


    【解决方案1】:
    • 支持彩色输出的实用程序(命令行程序)通常在其标准输出未连接到 终端(控制台)时省略颜色代码),例如当输出重定向到文件或通过管道发送时。

      • 如果意图是程序化处理输出(而不是在终端中显示),我们的想法是不要使用格式化指令污染数据。
    • 在这种情况下,您必须使用实用程序特定选项(如果支持),以强制无条件使用着色

    PowerShell 确实通过管道传递颜色代码,因此从具有git 存储库的目录执行的类似以下内容应该会产生彩色输出。

    PS> git -c color.status=always status -b --short | % { $i=0 } { "$((++$i)): $_" }
    1: ## master
    

    单词master(或任何处于活动状态的分支)应该出现在绿色中。

    -c color.status=always 技术所采用的 answer 已在您链接到它后进行了更新,因此我怀疑早期的形式在强制无条件彩色输出方面根本无效。

    【讨论】:

      【解决方案2】:

      据我所知,您无法保留 git status -s 输出的颜色,或通过 StdIn 传送到 PowerShell 的任何其他命令输出。通过 StdIn 输入 PowerShell 函数的文本的颜色信息“丢失”。

      我能想到重新添加颜色的唯一方法是执行 RegEx 匹配或基于位置的着色,对每个着色部分使用多个 Write-Host "line section" -ForegroundColor COLOR -NoNewline

      控制台使用 System.IO.StreamReader 通过 StdIn 接受输入。在 PowerShell/ISE 中尝试此命令 [Console]::In | Get-Member

      【讨论】:

      • 不幸的是,情况似乎如此。太糟糕了,我遇到了一些可能的其他 shell (bash) 的答案。
      • 基于正则表达式的着色很有趣,但请注意,PowerShell 确实通过颜色代码,您只需要确保输入命令即使在其标准输出连接到时也会发出它们一个管道,它通常需要一个 - 实用程序特定 - 选项,例如 -c color.status=always 在 Roy 的命令的情况下。
      【解决方案3】:

      如果您正在将 o/p 写入控制台 [主机 - 准确地说]。您可以使用提供“前景”和“背景”属性的 Write-Host cmdlet,您可以使用它来设置您选择的颜色。

      【讨论】:

      • 这只能让我设置自己的颜色,不能重复使用 Git 输出的颜色
      猜你喜欢
      • 2023-01-11
      • 2011-01-20
      • 2019-01-24
      • 2012-10-28
      • 2011-11-30
      • 1970-01-01
      • 2012-03-31
      • 2013-07-03
      • 2023-03-15
      相关资源
      最近更新 更多