我只是玩了一些c#和Msysgit的git.exe,并且遇到了丢失的颜色问题。我有一个非常简单的控制台程序:
class Program
{
static void Main(string[] args)
{
System.Diagnostics.ProcessStartInfo Msysgit = new ProcessStartInfo();
Msysgit.CreateNoWindow = true;
Msysgit.UseShellExecute = false;
Msysgit.RedirectStandardError = true;
Msysgit.RedirectStandardOutput = true;
Msysgit.FileName = @"C:\Program Files (x86)\Git\bin\git.exe";//Msysgit default location
Msysgit.Arguments = "log --graph --format=format:\"%C(bold blue) %x08%h\" "; //git command
Msysgit.WorkingDirectory = @"C:\git\posh-git";//repo to test with
using (Process gitProcess = new Process())
{
gitProcess.StartInfo = Msysgit;
gitProcess.Start();
string gitout = gitProcess.StandardOutput.ReadToEnd();
Console.WriteLine(gitout);
}
Console.ReadLine();
}
}
这产生以下结果:
*
*(Esc)[1; 34m2490619
| \
| *(Esc)[1; 34me81889e
| | \
| | *(Esc)[1; 34mab09e6b
| | /
| *(Esc)[1; 34m16bbe4c
现在我可以看到ANSI转义序列[1; 34m表示蓝色应用于SHA-1并且在git命令中请求;但是与git命令的--graph部分输出相关的颜色信息发生了什么,特别是管道和斜杠。当从Powershell对git.exe进行相同的调用时,图表显示为彩色以及蓝色SHA-1。
我的总体意图是从git.exe捕获输出,应用一些c#处理,然后将修改后的输出发送到Powershell。同样,即使颜色在屏幕上正确显示,保存Powershell中的输出也会丢失图形颜色信息。