【发布时间】:2019-11-22 18:20:09
【问题描述】:
我有一个用于自动同步各种远程 git 存储库的脚本。我试图用我的脚本做的一件事是从每个命令中捕获 stderr 的输出,并将所有这些错误写入一个文本文件,然后在脚本完成后通过电子邮件发送给我。这会提醒我需要解决的任何问题。
但是,我遇到以下两行的问题:
{
git fetch --prune-tags github-fetch master
git push github master
} 2> '/tmp/stderr-contents-sync_git_repositories.txt'
问题在于git fetch 行正在将以下内容写入标准错误:
From https://github.com/XJDHDR/xjdhdr-random-code.wiki
* branch master -> FETCH_HEAD
13af304..333d602 master -> github/master
git pull 行是这样写的:
To ssh://github.com/XJDHDR/xjdhdr-random-code.wiki.git
333d602..da65970 master -> master
我的问题是这些都不是错误,每次我运行脚本时都会通过电子邮件发送。我想知道是否可以阻止 git 将这些非错误写入 stderr 或从 stderr 输出中过滤掉这些类型的消息,同时保留真正的错误。
【问题讨论】:
-
也许您正在寻找
-q/--quiet选项?我不确定它是否隐藏了这样的输出。 -
--quiet选项确实隐藏了我提到的输出。我担心该选项是否还会隐藏发生的任何错误?还是仍然发送错误? -
@XJDHDR 查看我的回答:Git 不仅将 stderr 用于错误,还用于信息性消息。我建议的方法应该允许您捕获失败的命令执行(使用他们的 stdout/stderr),而不是单独依赖 stderr。
-
获取和推送的文档说@wjandrea 提到的
-q选项确实关闭了所有输出,除了每个输出的实际错误——特别是,它关闭了到stderr 的进度报告。