2016-08-09 17 views
1

場合、私はgit statusの出力を示しbashの上でコマンドを実行したいのですが、何か面白いものがある場合にのみ。言い換えれば:すべてがうまくいけば、私はコマンドが何かを印刷するのを望んでいません。基本的に私は実行することでこれを実現することができますフォワード終了コードは

if [[ $(git status -s) ]]; then git status; fi 

ここにトリックは興味深いものがある場合-sフラグだけ何かを出力していることであるので、それは私が唯一の欠点:-)

にしたいまさにんGitディレクトリではないディレクトリでこれを実行すると、0に等しくない終了コードは得られません。 git statusまたはgit status -sを直接実行すると、両方とも終了コード128で失敗します。しかし、ifでこれを行うとすぐに、終了コードは0になります。

終了コードが転送されるように、どのように私は私のスクリプトを向上させることができますか?

+0

は 'gitのステータスは何の終了コードを与える-s'ん? – 123

+0

'0'を返しますが、出力自体は空です。 –

答えて

1

[[すぎ以内に終了ステータスチェックを行います。

if [[ -n $(git status -s 2>/dev/null) ]]; then git status; fi 
+0

または単に 'gitのステータスは2>を/ dev/nullを-s場合は、計画した123 @その後のgit status' – 123

+0

が、OPは出力文字列をチェックしたい。.. – heemayl

+0

はgitの状態でも何場合はtrueを返し-s''い興味のあることが起こったのですか? – 123

1

だけでは/ dev/nullにリダイレクトしてチェックし、出力が空であるかどうか:

[ -n "$(git status -s 2>/dev/null)" ] && git status 

これはgit status実行しますgit status -sコマンドは正常に実行され、その出力は空ではありません。man test

-n STRING 
      the length of STRING is nonzero 
+0

は残念ながら、これは動作しません:それは正しく終了コードを転送しますが、参照するには、興味深いものがない場合は出力を抑制しません。 –

+0

@GoloRodenあなたが正しいです、私は更新していました。 – fedorqui

1

あなたはgitでない場合には、ディレクトリをrev-parseを使用することができます面白い何事もなかったかどう

git rev-parse 2>/dev/null && { git status -s || git status; } 
関連する問題