I'm trying to detect from bash if my git push
was successful. I am checking for local changes previously in my script like this:
if [ -z "$(git status --porcelain)" ]; then
and that works fine. This is the expression I have tried but this one doesn't work, in fact it errors:
if [ "$(git push --porcelain)" -eq "Done" ]; then
yields:
Done: integer expression expected
When I run git push --porcelain
from the command line, the output is Done
. Does this mean I should be checking for that text in my condition?
If I do the previous comparison, that doesn't work either, I get the same error:
1 file changed, 309 insertions(+)
Current branch master is up to date.
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 3.59 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
bash: [: To https://github.com/blah...
refs/heads/master:refs/heads/master 88aff43..cf0c97c
Done: integer expression expected
git push
returns a zero exit code on success, and non-zero on failure.
So you can write:
if git push
then
echo "git push succeeded"
else
echo "git push failed"
fi
Your condition check should have been something like:-
#!/bin/bash
if [[ "$(git push --porcelain)" == *"Done"* ]]
then
echo "git push was successful!"
fi
-eq
is for integer comparisons, ==
is for string comparisons. The following illustrates the difference.
[[ 00 -eq 0 ]] && echo "zero is zero, regardless of its representation"
[[ 00 = 0 ]] || echo "00 and 0 are two different strings"
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