0

次の点を考慮してください。

$ cd ~/.emacs.d/lisp/tabbar
$ git pull
Already up-to-date.

$ git pull | grep -q "Already" ; echo $?
0

まだ私と一緒に?今:

$ cd ~/src/emacs-tmp/trunk
$ bzr up                           
Tree is up to date at revision 108837 of branch /home/px/src/emacs-tmp/trunk

$ bzr up | grep -q "Tree" ; echo $?     
Tree is up to date at revision 108837 of branch /home/px/src/emacs-tmp/trunk
1

質問:

  • grepの戻りコードが1番目のケースで「0」(見つかった)、2番目のケースで「1」(見つからなかった)なのはなぜですか?
  • grepping時に最初の(git pull)コマンドの出力が非表示になるのはなぜですか?
4

3 に答える 3

1

あなたの「目に見える」コマンドは、stdoutではなくstderrに出力されていると思います。2>&1でリダイレクトしない限り、grepはstdoutのみを検索します。

したがって、試してみてください

bzr up 2>&1 | grep -q "Tree" ; echo $?
于 2012-07-04T12:17:50.970 に答える
1

bzrは標準入力を検査しているだけで、標準エラーデバイス( /dev/stderr)に出力しているように見えます。次の宛先にリダイレクトするgrepことで、この推測を確認または拒否できます。stderrstdin

bzr up 2>&1 | grep -q "Tree" ; echo $?   
于 2012-07-04T12:18:59.307 に答える
1
  • grepの戻りコードが1番目のケースで「0」(見つかった)、2番目のケースで「1」(見つからなかった)なのはなぜですか?

おそらく、最初のケースでは出力がstdoutにあり、2番目のケースでは出力がstderrにあるためです。コマンドに「2>&1」を追加して、すべてをスタッドアウトにスローできます。

  • grepping時に最初の(git pull)コマンドの出力が非表示になるのはなぜですか?

「-q」と言ったので、grepにシャットダウンするように指示します:-)

于 2012-07-04T12:19:31.600 に答える