如何阻止 git 将非错误写入 stderr
How to stop git from writing non-errors to stderr
我有一个脚本可以用来自动同步各种远程 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 输出中过滤掉这些消息,同时保留真正的错误。
write all those errors into a text file
那些 不是 总是错误,考虑到大多数 Git 命令在 stderr 上输出信息消息,如 :
stderr as it is just informative messages, not to be consumed by machines.
如果最好测试命令的退出状态并通过电子邮件发送两者 stdout and stderr 如果所述退出状态不同于 0
此外,您正在进行两个重定向:>
后跟 >
:第二个将 重新创建 /tmp/stderr-contents-sync_git_repositories.txt
:第二个重定向应该是 >>
,而不是 >
.
所以:
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
的原因:>>
部分仅在 cmd1
失败时运行。
我有一个脚本可以用来自动同步各种远程 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 输出中过滤掉这些消息,同时保留真正的错误。
write all those errors into a text file
那些 不是 总是错误,考虑到大多数 Git 命令在 stderr 上输出信息消息,如
stderr as it is just informative messages, not to be consumed by machines.
如果最好测试命令的退出状态并通过电子邮件发送两者 stdout and stderr 如果所述退出状态不同于 0
此外,您正在进行两个重定向:>
后跟 >
:第二个将 重新创建 /tmp/stderr-contents-sync_git_repositories.txt
:第二个重定向应该是 >>
,而不是 >
.
所以:
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
的原因:>>
部分仅在 cmd1
失败时运行。