#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. Спасибо, просто работа!