Roy*_* T. 5 terminal powershell ansi-colors
我有一个非常简单的powershell脚本,该脚本在每行前都添加了一个数字。
function number
{
$i = 0;
foreach($line in $input)
{
[string]$i + ":" + $line
++$i
}
}
Run Code Online (Sandbox Code Playgroud)
我希望此功能保留输入的颜色。例如,如果我执行以下命令,则会丢失颜色:
git status -s | number
Run Code Online (Sandbox Code Playgroud)
执行时
git status -s
Run Code Online (Sandbox Code Playgroud)
给我一个漂亮的彩色输出。我可以在powershell函数中进行哪些更改以实现此目的。
注意我已经尝试告诉git总是输出颜色以及该问题的答案中的信息,因此我认为忽略颜色是我这一面。
这不是该问题先前被标记为的副本的重复。
我已经看到了这个问题,实际上是关于如何防止MSBuild写入标准错误而不是标准输出的问题,在这种情况下,颜色不能显示出来。关于这个问题的唯一相似之处是标题。此处的其他答案(带有HTML转换)不适用于此处,因为这需要将数据写入控制台并且不能通过管道传输。
当标准输出未连接到终端(控制台)时,例如当输出重定向到文件或通过管道发送时,支持彩色输出的实用程序(命令行程序)通常会省略颜色代码。
在这种情况下,您必须使用IF 支持的特定于实用程序的选项,以便强制无条件使用着色。
PowerShell确实通过 pipeline 传递颜色代码,因此从具有存储库的目录执行类似以下内容的操作git应该会产生彩色输出。
PS> git -c color.status=always status -b --short | % { $i=0 } { "$((++$i)): $_" }
1: ## master
Run Code Online (Sandbox Code Playgroud)
该单词master(或任何处于活动状态的分支)应显示为绿色。
自从您链接到该技术以来,采用该技术的答案已更新,因此我怀疑早期的形式在强制无条件彩色输出方面-c color.status=always根本无效。
笔记:
-c color.status=alwaysGit 或--color=alwaysGNU 实用程序),可以通过(事实上的)标准在类Unix环境(包括 Windows 上的 WSL)中找到解决方法实用性,如本答案script所示。据我所知,您无法保留 输出的颜色git status -s,或通过 StdIn 通过管道传输到 PowerShell 的任何其他命令输出。通过 StdIn 通过管道传输到 PowerShell 函数的文本的颜色信息“丢失”。
我能想到的添加颜色的唯一方法是执行正则表达式匹配或基于位置的着色,Write-Host "line section" -ForegroundColor COLOR -NoNewline对每个彩色部分使用多个。
控制台使用 System.IO.StreamReader 通过 StdIn 接受输入。[Console]::In | Get-Member在 PowerShell/ISE 中尝试此命令。
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |