5

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

2 Answers 2

15

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
Sign up to request clarification or add additional context in comments.

Comments

10

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"

1 Comment

Thanks, just the job!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.