强制“混帐地位”来输出彩色的终端上(脚本内)(Force “git status” to outpu

2019-08-31 10:50发布

编辑:

我想提出一个建议,即解析颜色是一个普遍糟糕的设想。

为什么我想那是让我既可以分析它,并在我自己的脚本输出其传递的一部分。 这是...好了,但它很可能是更理智用瓷器或一些这样和重新构建着色部喽!

原来的答案如下。


我喜欢看的颜色,因为我的脚本是足够强大的(到目前为止)来处理颜色代码。 它看起来像我要对粮食在这里,但我真的没有看到什么大不了是关于有解析类的东西在脚本中的转义码是什么。 如果颜色帮助交互使用,他们为什么不脚本使用帮助,我可能会被汇总数据和运算比我手动将更多的数据? 不会的颜色更为重要

无论如何,我有一个整洁的小shell脚本,我写了munges git status输出,我只是希望让这个脚本保持颜色不变。 我的全球混帐配置设置,以便改变和未跟踪文件列表中的git的状态的颜色显示。 不幸的是不像git diff也迫使彩色别无选择git status ,我可以找到。

要非常清楚,这是问题:

$ git status

产生完美的输出,但(摘自我的脚本如下)

git status | sed "s/^#/\x1b[34m#[0m/"

不会产生彩色git status输出,你甚至可以在这里看到我明确地将领先的哈希字符,蓝色,因为它有助于从我的脚本突出输出的不同区域。

有谁知道怎么把它放出来的颜色? 是否有可能一个标准的程序,我可以使用,可以用来作为一个“伪终端”标准输入/输出管? 我其实也工作在pty伪终端的工具,所以我可以肯定使用的,为了这个目的,但它是一个相当严厉的解决方案(而不是准备使用但因为我还没有建好的话)。

Answer 1:

为了避免改变你的混帐配置,你可以通过传递配置变量与当前命令做到-c

    git -c color.status=always status | less -REX

该变量是在status只有命令。 对于diffshowlog变量是color.ui

    git -c color.ui=always diff | less -REX

需要注意的是-c必须成为 statusdiff的说法,而不是之后。



Answer 2:

编辑:

我想提出一个强有力的建议,即解析颜色是一个普遍糟糕的设想。

为什么我想那是让我既可以分析它,并在我自己的脚本输出其传递的一部分。 这是...好了,但它很可能是更理智用瓷器或一些这样和重新构建着色部喽!

原来的答案如下。


我不断地问问题后,真的很快找到答案。 事做考虑足够长的时间写出来,你制定更好的方法来解决它的问题。 总之,解决这仅仅是

git config color.status always

我想,一个通用的解决方案涉及expect什么pty强制要求其以为他们是在终端上的任何程序有关。



Answer 3:

我用的git的别名执行shell命令时,有同样的问题。 显然,git的外壳不会从当前环境继承,所以它并不了解我的色彩设置。

除了增加全球的git颜色设置界面,通过我让我的别名,如下面的,其需要被告知使用的颜色,如git的二级命令将默认为任何1.8.x的版本的人提到修正了这个。

[alias]
  ignored = !git ls-files -v|grep --color '^h'

当作为别名一样,如果我只是跑的命令运行现在,这相当于产生彩色输出。

对于sed的,这个其他答案似乎更可靠地工作,用tput的。 https://unix.stackexchange.com/a/45954



文章来源: Force “git status” to output color on the terminal (inside a script)