2016-10-21 5 views
3

git pushが成功した場合、私はbashから検出しようとしています。私は以前このスクリプトのローカル変更を確認しています:シェルスクリプトからgit pushの応答を確認してください

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

これは問題ありません。これは私が試してみました表現であるが、この1は動作しません、実際にはそれがエラー:

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 

答えて

4

あなたの条件チェックのようなものされている必要があります: -

#!/bin/bash 

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

-eqにされます整数比較の場合、==は文字列比較用です。以下にその違いを示します。

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

おかげで、ちょうど仕事を! – Rodders

9
git push

故障にゼロの終了成功したコード、および非ゼロを返します。

だから、書くことができます。

if git push 
then 
    echo "git push succeeded" 
else 
    echo "git push failed" 
fi 
関連する問題