使用手表时为什么不出现git颜色?

运行git status -sb我看到:

在此处输入图像描述

我想看(来自procps-ng 3.3.3)一个存储库。 --color选项应该保持颜色。


有趣的是,它适用于ls

 $ watch --color "ls --color" 

显示:

来自ls的输出


然而对于git ,颜色消失了:

 $ watch --color "git status -sb" 

在此处输入图像描述


那么,为什么watch显示来自ls但不来自git输出的颜色?

以下陈述是正确的:

  • watch在新shell中运行命令, sh
  • .bashrc别名lsls --color=auto以启用颜色
  • sh不会inheritance或使用bash别名。

因此,当watch运行ls ,它不是要求颜色,它只是运行普通的旧版本。 你可以规避这一点但是-as aditya指出 – 你还需要在watch上启用颜色才能正确处理它们。

ls一个工作示例是:

 watch --colour -- ls --color=always 

如果你没有通过--color来观看,你会看到一堆内嵌的丑陋颜色代码。


ls --color被解释为ls --colour=always

ls --colour=auto 不会在手表中打印颜色。 这表明它正在推断终端本身的颜色支持。

有关更多原因,我们可以测试表壳是否认为它是真正的终端 :

 $ bash -c '[[ -t 1 ]] && echo "real terminal"' real terminal $ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'" # ... nothing. 

我怀疑某些应用程序正在查看(或类似)以确定它们是否应该打开颜色。

git使用配置值来确定是否显示彩色输出。

例如:

 git config --global color.ui auto 

这会将颜色设置全局设置为auto 。 在auto模式下,git将在发送颜色代码之前确定它是否是真正的终端,正如Oli建议的那样。

您可以always强制使用此全局值,但更好的方法是将其应用于特定命令:

 git -c color.status=always status -sb 

把它们放在一起:

 watch --color git -c color.status=always status -sb