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


10

运行时,git status -sb我看到:

在此处输入图片说明

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


有趣的是,它适用于ls

$ watch --color "ls --color"

显示:

ls的输出


但是对于git颜色消失:

$ watch --color "git status -sb"

在此处输入图片说明


那么,为什么watch显示颜色ls而不显示git输出?



@Jobin,谢谢,在发布此问题之前,我实际上在该链接上发表了评论:)
Drew Noakes 2014年

Answers:


5

以下陈述是正确的:

  • watch在新的shell中运行命令sh
  • .bashrc别名lsls --color=auto使颜色。
  • sh不继承或使用bash别名。

因此,当watch运行时ls,它并不需要颜色,而只是运行普通的旧版本。您可以绕开它,但正如aditya指出的那样,您还需要启用颜色watch以使其正确处理。

一个有效的示例ls是:

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

如果您不通过--color观看,则会看到一系列内联的丑陋颜色代码。


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

ls --color=auto 无法在手表中打印颜色。这表明它是在从终端本身推断颜色支持。

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

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

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

我怀疑某些应用程序正在查看该(或类似内容)以判断是否应打开颜色。


3
但是OP想要知道为什么它不能使用git status -sb,即使它可以使用ls --color
jobin 2014年

这是有道理的。但是,没有别名git直接在git的配置中设置颜色。因此,这似乎不是混叠问题。
Drew Noakes 2014年

答对了。auto如您正确推测的那样,我将设置我的颜色,导致git避免输出颜色。使用always替代解决了这个问题。非常感谢!
Drew Noakes 2014年

9

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

0

如果告诉git--color)和watch-c)使用颜色,则该方法有效:

watch -cd "git branch -va --color"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.