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 的返回码在第一种情况下是“0”(找到)而在第二种情况下是“1”(未找到)?
  • 为什么第一个(git pull)命令的输出在 grep 时隐藏?
4

3 回答 3

1

我认为您的“可见”命令是输出到标准错误,而不是标准输出。grep 只在标准输出中查找,除非您使用 2>&1 进行重定向。

因此,尝试

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

看起来 bzr 正在输出到标准错误设备 ( /dev/stderr),而grep只是检查标准输入。您可以通过尝试重定向stderr来确认或否认此猜测stdin

bzr up 2>&1 | grep -q "Tree" ; echo $?   
于 2012-07-04T12:18:59.307 回答
1
  • 为什么 grep 的返回码在第一种情况下是“0”(找到)而在第二种情况下是“1”(未找到)?

可能是因为在第一种情况下输出在 stdout 上,而在第二种情况下它在 stderr 上。您可以在命令中添加“2>&1”以将所有内容都扔到 stadout。

  • 为什么第一个(git pull)命令的输出在 grep 时隐藏?

因为你说“-q”,它告诉 grep 闭嘴:-)

于 2012-07-04T12:19:31.600 回答