停止git将非错误写入stderr

时间:2019-07-13 04:31:29

标签: bash git stderr

我有一个用于自动同步各种远程git存储库的脚本。我要对脚本执行的一件事是捕获每个命令的stderr输出,并将所有这些错误写入文本文件,脚本完成后通过电子邮件发送给我。这将提醒我需要解决的任何问题。我在以下两行中遇到了问题:

{
    git fetch --prune-tags github-fetch master
    git push github master 
} 2> '/tmp/stderr-contents-sync_git_repositories.txt'

问题是git fetch行将以下内容写入stderr:

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输出中过滤出来,同时保留真正的错误。

1 个答案:

答案 0 :(得分:0)

  

将所有这些错误写入文本文件

这些不是不是总是错误,考虑到大多数Git命令在stderr上将信息消息输出为I mentioned here

  

stderr,因为它只是信息性消息,不会被机器使用。

如果最好测试命令的退出状态,并在退出状态不同于0的情况下向stdout and stderr发送电子邮件

另外,您正在执行两个重定向:>后跟>:第二个重定向重新创建 /tmp/stderr-contents-sync_git_repositories.txt:第二个重定向应为{{1 }},而不是>>

所以:

>

这里,我在每个命令上覆盖了git fetch --prune-tags github-fetch master > tmp 2>&1 || cat tmp > '/tmp/stderr-contents-sync_git_repositories.txt' git push github master > tmp 2>&1 || cat tmp >> '/tmp/stderr-contents-sync_git_repositories.txt' 文件(带有其stdout / stderr),如果该命令失败,我将写入或追加到tmp

这比您的编辑要容易得多,在编辑时,您可以将两个命令都重定向到文件,即使其中一个命令可能失败了。

这就是我做/tmp/stderr-contents-sync_git_repositories.txt的原因:cmd1 || cat >> file部分仅在>>失败的情况下运行。