使用手表时为什么不出现git颜色?
运行git status -sb
我看到:
我想看(来自procps-ng 3.3.3)一个存储库。 --color
选项应该保持颜色。
有趣的是,它适用于ls
:
$ watch --color "ls --color"
显示:
然而对于git
,颜色消失了:
$ watch --color "git status -sb"
那么,为什么watch
显示来自ls
但不来自git
输出的颜色?
以下陈述是正确的:
-
watch
在新shell中运行命令,sh
。 -
.bashrc
别名ls
为ls --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