gpt4 book ai didi

git - 强制 "git status"在终端上输出颜色(在脚本内)

转载 作者:IT王子 更新时间:2023-10-29 00:43:33 27 4
gpt4 key购买 nike

编辑:

我想提出一个建议,即解析颜色通常是一个错误的想法。

我想要它的部分原因是这样我既可以解析它又可以在我自己的脚本输出中传递它。这很好……好吧,但使用瓷器或类似的东西并自己重新构建彩色部分可能会更明智!

原始问题如下。


我喜欢看颜色,因为我的脚本足够强大(到目前为止)可以处理颜色代码。看起来我在这里违背了原则,但老实说,我不明白必须在脚本中解析诸如转义码之类的东西有什么大不了的。如果颜色有助于交互使用,为什么它们不能帮助脚本使用,因为我可能会聚合数据并处理比手动处理更多的数据?颜色不是更重要吗?

无论如何,我有一个简洁的小 shell 脚本,我编写了 munges git status 输出,我只是想让这个脚本保持颜色不变。我的全局 git 配置已设置,以便已更改和未跟踪的文件列表以颜色显示在 git 状态中。不幸的是,与 git diff 不同,我找不到为 git status 强制设置颜色的选项。

要非常清楚,这就是问题所在:

$ git status

产生完美的输出,但是(摘录 self 的脚本如下)

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

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

有谁知道如何让它熄灭颜色?是否有我可以使用的标准程序可以用作“假终端”STDIN/STDOUT 管道?事实上,我也在开发一个 pty 伪终端工具,因此我当然可以为此目的使用它,但这是一个相当笨拙的解决方案(而且还没有准备好使用,因为我还没有完成它的构建)。

最佳答案

为避免更改您的 git 配置,您可以通过使用 -c 传递配置变量来仅为当前命令启用颜色。

对于status命令,变量是color.status:

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

对于diffshowlog> 和 grep 命令,变量是 color.ui:

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

请注意,-c 必须出现在statusdiff 参数之前,而不是之后。

或者,对于diffshowloggrep 命令,您可以在命令之后使用 --color=always :

    git diff --color=always | less -REX

注意:正如 Steven 所说,如果您正在尝试提取有意义的数据,那么您可以使用 --porcelain 来获得对分析器更友好的输出,而不是通过解析颜色来提取含义。

p>
    git status --porcelain | awk ...

然后,如果您愿意,可以稍后重新引入颜色。

要获取用户配置的颜色,可以使用git config --get-colour:

    reset_color="$(tput sgr0)"
remote_branch_color="$(git config --get-color color.branch.remote white)"

echo "Pushing to ${remote_branch_color}${branch_name}${reset_color}"

更多示例 here .

关于git - 强制 "git status"在终端上输出颜色(在脚本内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com