运行时git status -sb
我看到:
我想要watch
(来自 procps-ng 3.3.3)一个存储库。该--color
选项应该保留颜色。
有趣的是,它适用于ls
:
$ watch --color "ls --color"
显示:
然而git
颜色消失了:
$ watch --color "git status -sb"
那么,为什么watch
显示颜色ls
而不是git
输出颜色?
答案1
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
答案2
以下陈述是正确的:
watch
在新 shell 中运行该命令sh
。.bashrc
别名ls
以ls --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
如果git
( --color
) 和watch
( -c
) 被告知使用颜色,它就会起作用:
watch -cd "git branch -va --color"