【发布时间】:2013-04-11 00:31:59
【问题描述】:
编辑:
我想提出一个建议,即解析颜色通常是一个考虑不周的想法。
我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它。这……好吧,但使用瓷器或其他类似的东西并自己重新制作彩色部件可能会更明智!
原始问题如下。
我喜欢看颜色,因为我的脚本足够强大(到目前为止)可以处理颜色代码。看起来我在这里违背了规律,但老实说,我不明白必须解析脚本中的转义码之类的东西有什么大不了的。如果颜色有助于交互式使用,为什么它们不能帮助我可能聚合数据并处理比手动更多的数据的脚本使用?颜色不是更重要吗?
无论如何,我有一个整洁的小 shell 脚本,我写了 munges git status 输出,我只是想让这个脚本保持颜色完整。我的全局 git 配置已设置,以便更改和未跟踪文件的列表在 git 状态中以颜色显示。不幸的是,与git diff 不同的是,我找不到为git status 强制颜色的选项。
很清楚,这就是问题所在:
$ git status
产生完美的输出,但是(摘自我的脚本如下)
git status | sed "s/^#/\x1b[34m#[0m/"
不会产生彩色的git status 输出,您甚至可以在这里看到我明确地将前导散列字符转换为蓝色,因为它有助于突出显示脚本中不同的输出区域。
有谁知道如何让它熄灭颜色?是否有可以用作“假终端”STDIN/STDOUT 管道的标准程序?事实上,我也在开发一个 pty 伪终端工具,所以我当然可以为此目的使用它,但它是一个相当笨拙的解决方案(并且还没有准备好使用,因为我还没有完成构建它)。
【问题讨论】:
-
解析颜色代码以提取对脚本有意义的数据的一个问题是,不同的用户可能在他们的配置文件中配置了不同的颜色。为避免可能导致的问题,git 为各种命令提供了
--porcelain选项,该选项应提供一种更易于解析且不易在环境之间更改的格式。 -
添加到@joeytwiddle 的评论中,作为设计说明,将状态信息编码为 only 颜色是一个坏主意,因为有些人有各种色盲(红色-绿色是最常见的,但也有蓝黄色等等;详情请参阅nei.nih.gov/health/color_blindness/facts_about)。它影响了大约 10% 的人类!始终确保除了颜色之外还有其他方法可以提取必要的信息。
标签: git shell unix io terminal