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

2024-04-01

EDIT:

我想提出一个建议:解析颜色通常是一个考虑不周的想法。

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

原始问题如下。


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

不管怎样,我有一个简洁的 shell 脚本,是我写的 mungesgit status输出,我只是想让这个脚本保持颜色完整。我的全局 git 配置已设置,以便已更改和未跟踪的文件列表在 git 状态中以颜色显示。不幸的是不像git diff没有强制颜色的选项git status我能找到的。

很清楚地讲,这就是问题所在:

$ git status

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

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

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

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


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

For the status命令,变量是color.status:

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

For diff, show, log and grep命令,变量是color.ui:

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

注意-c必须来before the status or diff争论,而不是之后。

或者,对于diff, show, log and grep命令,您可以使用--color=always after命令:

    git diff --color=always | less -REX

注意:正如史蒂文所说,如果您尝试提取有意义的数据,那么您可以使用而不是解析颜色来提取含义--porcelain以获得更适合解析器的输出。

    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 https://github.com/joeytwiddle/dotfiles/blob/3081c5d034c6c11907b9b290d97f815848fceb68/j/config/auto.sh/git_aliases#L1430-L1432.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制“git status”在终端上输出颜色(在脚本内) 的相关文章

  • 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?

    为什么下面的代码会产生 public static class Program public static void Main params string args var sourceFileName C Users ehoua Desk
  • 具有单独 work_tree 的 Git 子模块

    我按照本页上的教程使通过 Git 部署我的网站变得简单 http toroid org ams git website howto http toroid org ams git website howto 到目前为止一切都很好 但是我最近
  • 如何在 Xcode 4.2 中创建 Shell 脚本目标?

    我想知道是否有人知道 XCode 4 1 如何创建 shell 脚本 该选项不存在 但在最新版本中可能会被称为其他名称 塔 在导航器中选择您的项目 单击 添加目标 为空目标选择 聚合 添加构建阶段 gt 添加运行脚本 单击构建阶段并编辑运行
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • 将“npm run start”的输出写入文件

    我想捕获的输出npm run start在一个文件中 我遇到了大量错误 我想更好地控制如何筛选输出 当我尝试时 npm run start gt log txt 我得到一个非常简短的文件 8 行 其结尾为 34m 39m 90m wdm 3
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • tar 和 zip 有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 tar 和 zip 有什么区别 每个的用例是什么 tar其本身只是将文件捆绑在一起 结果称为tarball 尽管zip也应用压缩 通常你使用gzip随
  • 代表 Git 存储库的数学结构是什么

    我正在学习 Git 如果我能描述一下代表 Git 存储库的数学结构 那就太好了 例如 它是一个有向无环图 它的节点代表提交 它的节点有代表分支等的标签 每个节点最多一个标签 没有标签使用两次 我知道这个描述不正确 我只是想解释我正在寻找的内
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • 在 mac 终端中加载库时出错

    有谁请帮忙 我该如何修复以下错误 dyld Library not loaded usr local lib libgdbm 4 dylib Referenced from usr local bin zsh Reason image no
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m

随机推荐

  • 如何将 .php 文件上传到 Heroku

    我需要将 php 文件上传到我的 Heroku 网站 这是如何使用终端完成的 我已登录终端并可以看到我的应用程序等 谢谢你的帮助 如果您需要通过终端在 Heroku 应用程序上上传文件 您需要跟踪它并使用Git 安装并配置 heroku 工
  • 就空间而言最快的方法——用Python找到素数

    也许这是一个愚蠢的问题 但我想知道你是否可以提供用Python查找素数的最短来源 我还想知道如何使用 map 或 filter 函数查找素数 谢谢 编辑 当我说最快 最短时 我的意思是使用较少字符 单词的方式 无论如何 不 要考虑竞争 我想
  • 有没有办法强制 Gerrit 将分支中的所有提交推送到代码审查?

    Gerrit 将合并提交历史记录中较早且位于存储库的不同 分支 中的潜在未经审核的更改 这是一个例子 结账 gerrit 分支devel 创建file1 txt 添加 提交 推送到refs heads temp branch 创建file2
  • 我在运行 flutter create my_appName 时收到以下错误:“my_appName”不是有效的 Dart 包名称

    我尝试过将flutter升级到最新版本 我仍然遇到同样的错误 我遇到了完全相同的错误 按照 Flutter 团队附加的命名约定重命名我的工作目录后here https dart lang github io linter lints pac
  • 自动将提交消息附加到 Git 中提交的文件

    我的目标是在存储库中每个文件的末尾维护所有提交历史记录 消息的日志 我使用 commit msg 挂钩来获取提交消息 准备它并将其附加到文件中 但是 我注意到由于文件在暂存后发生了更改 因此 git status 仍然显示为已修改 执行此操
  • 在 MVVM Android 中使用共享首选项的最佳实践?

    我一直在寻找在 Android 的 MVVM 架构中使用共享首选项的最佳方法 但我只能找到一些片段 因此没有清晰的图像来以最佳方式做到这一点 因此我有几个问题 我应该在应用程序上保留 SharedPrefs 的单例实例吗 ViewModel
  • 更改 HTML 数据列表自动完成行为

    我正在尝试为我正在开发的网站实现搜索自动完成功能 我正在使用 HTML 数据列表 其中的选项是从后端 MySQL 数据库动态生成的 与 AJAX 通信 但是 数据列表自动完成功能并不像我想要的那样工作 如果关键字不按顺序排列 自动完成功能似
  • 将Admob集成到Android问题

    我正在尝试将 Admob 集成到 android 但最终没有成功 该文档说需要提供 DeviceID 才能获取真实设备的广告 您能帮我解决这个问题吗 但我通过设置 AdManager TestEmulator 在模拟器中获取广告 使用 Ad
  • Common Lisp 中重置状态

    新手 Common Lisp 问题在这里 有没有办法重置环境状态 我的意思是 是否有一些命令可以使 REPL 恢复到启动后的相同状态 即取消所有变量 函数等 或者如果这不在 Common Lisp 标准中 是否有一些扩展在 SBCL 我使用
  • 来自 Yelp API 的错误请求

    灵感来自这个 Yelp 教程 https github com Yelp yelp api blob master v2 python sample py 我创建了一个脚本来搜索给定城市的所有健身房 我调整了脚本这些更新 http www
  • 将可变参数传递给 printf [重复]

    这个问题在这里已经有答案了 我想要一个辅助功能log它主要执行以下操作 log file array has d elements n 10 writes 2014 02 03 16 33 00 array has 10 elements
  • 按名称从数据框中删除列[重复]

    这个问题在这里已经有答案了 可能的重复 从 R 中的 data frame 中删除整列 https stackoverflow com questions 6286313 remove an entire column from a dat
  • 等待异步方法在 for 循环中完成

    我有一个包含三个异步方法的for循环 我想在这3个异步方法完成后进行一些处理 void getAllUsersInformations dispatch async dispatch get global queue DISPATCH QU
  • 从外部访问 while 循环内部的变量(C#)?

    我是 C 新手 我试图从这段时间起达到 MAX 的价值 这样我就可以在外面使用它 但我不能 任何人都有一些想法 提前致谢 while Condition Double MAX somecode Console WriteLine The O
  • 如何识别网站中的慢速设备?

    当为移动设备调整网页时 我总是依赖 CSS 媒体查询 最近我不再只担心屏幕尺寸 还担心许多移动设备的 javascript 引擎 一些依赖于窗口滚动或快速 DOM 转换序列的常见 javascript 效果在慢速设备上效果非常糟糕 有没有办
  • 需要解释为什么 RecyclerView.Adapter.notifyItemChanged(int position, Object Payload) 和我绑定的有效负载参数是对象列表

    RecyclerView Adapter notifyItemChanged intposition Objectpayload 其中payload是将传递给RecyclerView Adapter onBindViewHolder VHh
  • BackgroundWorker - Cancellation Pending 在 RunWorkerCompleted 中更改为 false。为什么?

    取消BackGroundWorker后 在DoWork中 CancellationPending为true 但是当他来到RunWorkerCompleted时 CancellationPending为false 我不知道我做错了什么 sta
  • 在运行时检测字节序有什么好处?

    我搜索了宏来确定机器上的字节顺序 但没有找到任何标准的处理器宏 但很多解决方案在运行时执行此操作 为什么我应该在运行时检测字节序 如果我这样做 ifdef LITTLE ENDIAN inline int swap int x do swa
  • Python Atom API:使用字典时如何设置atom var

    The Atom api https pypi python org pypi atom 0 3 6是Enaml用来实现MVC的库 更改一个原子变量 UI 就会更新 在 UI 中更改它 您的模型就会更新 我想将 Atom var 在本例中为
  • 强制“git status”在终端上输出颜色(在脚本内)

    EDIT 我想提出一个建议 解析颜色通常是一个考虑不周的想法 我想要它的部分原因是我可以解析它并在我自己的脚本输出中传递它 这是 好吧 但使用瓷器或类似的东西并自己重新构建彩色部件可能会更明智 原始问题如下 我喜欢看到颜色 因为我的脚本足够