[英]Disabling git colors only when I log in from certain terminals
我希望git
在输出到可以处理颜色的设备时自动对输出进行着色,而在不能处理时不对其进行着色。 怎么做呢?
我有时会使用机器本身为旧机器开发代码。 其中一些可以处理 ANSI 颜色,而另一些则不能。 在 UNIX 系统上,我们曾经有一个名为TERMINFO的数据库,它列出了每个终端的功能。 通过检查colors
功能很容易判断终端是否支持颜色。 如果它是 -1,那么程序绝对不应该发送 ANSI 颜色序列。
$ tput colors
-1
理想情况下,git 将使用TERMINFO自动检测 ANSI 颜色序列是否合适。 但它不会并且只检查isatty()
。 我怀疑 git 开发人员添加TERMINFO支持并不是一个高优先级,所以我正在寻找任何能够提供相同功能的解决方法。
我已经知道如何使用git config
禁用 git color ,这不是我要问的。 我希望它仅在我从不支持 ANSI 颜色的终端(例如 Digital VT340)登录时被禁用。
我也已经看到了GIT_CONFIG_PARAMETERS="'color.ui=never'"
环境变量,但是根据@bk2204 和@torek,该变量很快就会消失。
变体 1: ~/.bashrc
的 shell 函数:
if ! tput colors >/dev/null 2>&1; then
git() {command git -c color.ui=never "$@"; }
fi
缺点是不能在 shell 脚本中使用。 也就是说,如果你运行一个 shell 脚本, git
无论如何都会尝试使用颜色。 所以变体2:一个shell脚本:
#! /bin/sh
if tput colors >/dev/null 2>&1; then
exec /usr/bin/git "$@"
else
exec /usr/bin/git -c color.ui=never "$@"
fi
将脚本命名为git
,使其可执行并放入$PATH
/usr/bin
之前的目录中。 例如,我的PATH
以$HOME/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin:…
开头; 我将个人脚本放入$HOME/bin
并将系统范围的脚本放入/usr/local/bin
为了让事情更简单,您可以将脚本命名为gitc
类的名称,删除/usr/bin/
并训练您的手指输入gitc
而不是git
。 然后你可以把脚本放在任何地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.