【问题标题】:C# app colored output when executed from git hooks从 git hooks 执行时的 C# 应用程序彩色输出
【发布时间】:2022-01-02 17:06:33
【问题描述】:

当从 git hooks (例如预提交等)执行时,我需要在控制台应用程序中显示彩色输出。这是我的一个开源项目的问题,您可以查看 here

假设我们有一个带有以下代码的控制台应用程序:

Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Hello World");

当我们从 git hooks 运行它时,输出是 white

我也尝试使用 VT100 转义码和enabling console virtual terminal 序列,但结果相同。

// ENABLE_VIRTUAL_TERMINAL_PROCESSING ...

// set color vt100
public static void SetForegroundColor(int r, int g, int b)
{
   Console.Write($"\x1b[38;2;{r};{g};{b}m");
}

例如预提交

#!/bin/sh

# run the application.
husky run 

感谢任何可以帮助我找到导致此问题的原因的信息。问题是我不确定在哪里看,是 git 特定的问题吗? Shell 脚本问题还是 C# 问题?

【问题讨论】:

  • 绝对不是 Git,它对输出没有任何影响。它也绝对不是 bash 本身,它也与输出无关。但是,git-bash(作为 Windows 端口 of bash)可能会在 C# 上使用某种技巧来捕获输出,这可能会导致交互不良。但是 vt100 转义颜色控件应该可以工作,因为这就是 Git 产生 它自己的 彩色输出的方式。
  • 我也在想同样的事情,但我在使用 vt100 时遇到了同样的问题!可能是 git-bash 问题!任何技巧:)?

标签: c# bash git git-bash githooks


【解决方案1】:

看起来 git bash 不支持 extended colors:

使用 vt100 转义颜色控件,没有扩展颜色解决了这个问题。

Console.WriteLine("\x1b[31mHello World2!\x1b[0m");
   /// <summary>
   /// https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#text-formatting
   /// Git-bash only supports 8 colors provided by the Windows Console.
   /// </summary>
   /// <param name="color"></param>
   /// <exception cref="ArgumentOutOfRangeException"></exception>
   public static void SetForegroundColor(ConsoleColor color)
   {
      var colorCode = color switch
      {
         ConsoleColor.Black => 30,
         ConsoleColor.Red or ConsoleColor.DarkRed => 31,
         ConsoleColor.Green or ConsoleColor.DarkGreen => 32,
         ConsoleColor.Yellow or ConsoleColor.DarkYellow => 33,
         ConsoleColor.Blue or ConsoleColor.DarkBlue => 34,
         ConsoleColor.Magenta or ConsoleColor.DarkMagenta => 35,
         ConsoleColor.Cyan or ConsoleColor.DarkCyan => 36,
         ConsoleColor.White => 37,
         _ => throw new ArgumentOutOfRangeException(nameof(color), color, null)
      };
      Console.Write($"\x1b[{colorCode}m");
   }

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 2015-07-15
    • 2021-09-28
    • 2015-02-02
    • 2011-03-14
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多