I have a script that I am using to automatically sync various remote git repositories. One thing I am trying to do with my scripts is to capture the output of stderr from every command and write all those errors into a text file that is then emailed to me after the script has finished. This will alert me to any problems that I need to fix.
However, I'm having a problem with the following two lines:
{
git fetch --prune-tags github-fetch master
git push github master
} 2> '/tmp/stderr-contents-sync_git_repositories.txt'
The problem is that the git fetch
line is writing the following to stderr:
From https://github.com/XJDHDR/xjdhdr-random-code.wiki
* branch master -> FETCH_HEAD
13af304..333d602 master -> github/master
And the git pull
line is writing this:
To ssh://github.com/XJDHDR/xjdhdr-random-code.wiki.git
333d602..da65970 master -> master
My problem is that neither of these are errors and they are emailed every time I run the script. I would like to know if it is possible to either stop git from writing these non-errors to stderr or filter these sort of messages out of the stderr output while preserving genuine errors.
write all those errors into a text file
Those are not always error, considering most Git commands outputs information message on stderr, as I mentioned here:
stderr as it is just informative messages, not to be consumed by machines.
If it better to test the exit status of the command and email both stdout and stderr if said exit status differs from 0
Plus, you are doing two redirections: >
followed by >
: the second one would recreate /tmp/stderr-contents-sync_git_repositories.txt
: that second redirection should be >>
, not >
.
So:
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'
Here I override a tmp
file on each command (with their stdout/stderr), and if that command fails, I write to, or I append to /tmp/stderr-contents-sync_git_repositories.txt
.
This is easier than your edit, where you redirect both commands to a file, even if one of them might have failed.
That is why I do cmd1 || cat >> file
: the >>
part only runs if cmd1
fails.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With