Проверка ответа git push из сценария оболочки

#git #bash #shell #github

#git #bash #оболочка #github

Вопрос:

Я пытаюсь определить из bash, был ли мой git push успешным. Я проверяю наличие локальных изменений ранее в моем скрипте следующим образом:

 if [ -z "$(git status --porcelain)" ]; then
  

и это работает нормально. Это выражение, которое я пробовал, но это не работает, на самом деле это ошибки:

 if [ "$(git push --porcelain)" -eq "Done" ]; then
  

выдает:

 Done: integer expression expected
  

Когда я запускаю git push --porcelain из командной строки, вывод Done . Означает ли это, что я должен проверять наличие этого текста в моем состоянии?

Если я выполню предыдущее сравнение, это тоже не сработает, я получу ту же ошибку:

 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
  

Ответ №1:

git push возвращает нулевой код выхода при успешном завершении и ненулевой при сбое.

Таким образом, вы можете написать:

 if git push
then
  echo "git push succeeded"
else
  echo "git push failed"
fi
  

Ответ №2:

Ваша проверка состояния должна была быть чем-то вроде:-

 #!/bin/bash

if [[ "$(git push --porcelain)" == *"Done"* ]]
then
  echo "git push was successful!"
fi
  

-eq предназначен для сравнения целых чисел, == предназначен для сравнения строк. Следующее иллюстрирует разницу.

 [[ 00 -eq 0 ]] amp;amp; echo "zero is zero, regardless of its representation"
[[ 00 = 0 ]] || echo "00 and 0 are two different strings"
  

Комментарии:

1. Спасибо, просто работа!