我有一个脚本,用于自动同步各种远程 git 存储库。我试图用我的脚本做的一件事是从每个命令中捕获 stderr 的输出,并将所有这些错误写入一个文本文件,然后在脚本完成后通过电子邮件发送给我。这将提醒我需要解决的任何问题。不过,我在以下两行中遇到了问题:
{
git fetch --prune-tags github-fetch master
git push github master
} 2> '/tmp/stderr-contents-sync_git_repositories.txt'
Run Code Online (Sandbox Code Playgroud)
问题是该git fetch
行正在将以下内容写入 stderr:
From https://github.com/XJDHDR/xjdhdr-random-code.wiki
* branch master -> FETCH_HEAD
13af304..333d602 master -> github/master
Run Code Online (Sandbox Code Playgroud)
这git pull
条线是这样写的:
To ssh://github.com/XJDHDR/xjdhdr-random-code.wiki.git
333d602..da65970 master -> master
Run Code Online (Sandbox Code Playgroud)
我的问题是这些都不是错误,每次运行脚本时都会通过电子邮件发送。我想知道是否有可能阻止 git 将这些非错误写入 stderr 或从 stderr 输出中过滤出这些类型的消息,同时保留真正的错误。
Von*_*onC 10
将所有这些错误写入文本文件
考虑到大多数 Git 命令在 stderr 上输出信息消息,这些并不总是错误,正如我在这里提到的:
stderr 因为它只是信息性消息,不被机器使用。
如果最好测试命令的退出状态,如果所述退出状态不同于 0,则向stdout 和 stderr发送电子邮件
另外,您正在执行两个重定向:>
后面跟着>
: 第二个重定向将重新创建 /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'
Run Code Online (Sandbox Code Playgroud)
在这里,我覆盖tmp
每个命令上的一个文件(及其 stdout/stderr),如果该命令失败,我会写入或附加到/tmp/stderr-contents-sync_git_repositories.txt
.
这比编辑更容易,在编辑中将两个命令重定向到一个文件,即使其中一个命令可能失败。
这就是我这样做的原因cmd1 || cat >> file
:该>>
部分仅在失败时运行cmd1
。
归档时间: |
|
查看次数: |
1381 次 |
最近记录: |