代码之家  ›  专栏  ›  技术社区  ›  Roy T.

保留管道输出的颜色

  •  5
  • Roy T.  · 技术社区  · 8 年前

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

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

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

    git status -s | number
    

    执行时

    git status -s
    

    给我一个色彩鲜艳的输出。我可以在powershell函数中更改什么来完成此操作。

    this question 所以我认为是我自己忽略了颜色。

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

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

    3 回复  |  直到 4 年前
        1
  •  4
  •   mklement0    6 年前
    • 通常支持彩色输出的实用程序(命令行程序) 省略 当其stdout未连接到 航空站 (控制台),例如当输出重定向到文件或通过管道发送时。

      • 这样做的目的是为了避免用格式化指令污染数据 程序设计的
    • 使用 特定于公用设施的选项,如果支持 为了强制 无条件的 着色的使用 .

    PowerShell公司 在管道中传递颜色代码 ,如下所示,从一个目录中执行 git 存储库,应该生成彩色输出。

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

    单词 master (或任何活动分支)应出现在 绿色 .

    这个 answer 其中 -c color.status=always 由于您链接了该技术,所以它被更新了,所以我怀疑早期的表单在强制无条件彩色输出方面根本无效。

        2
  •  3
  •   TechSpud    8 年前

    据我所知,不能通过 git status -s ,或通过StdIn管道传输到PowerShell的任何其他命令输出。通过StdIn管道传输到PowerShell函数的文本的颜色信息“丢失”。

    我唯一能想到的重新添加颜色的方法是使用多个 Write-Host "line section" -ForegroundColor COLOR -NoNewline 对于每个彩色部分。

    [Console]::In | Get-Member 在PowerShell/ISE中。

        3
  •  0
  •   Manjunath Rao    8 年前