【发布时间】:2013-09-09 00:04:13
【问题描述】:
在 Centos 6 机器上,这是可行的:
bash -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
这不是:
sh -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
我明白了:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0: `if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi'
别管 grep 和 tail。问题在于进程替换的东西:<(...)
谁能告诉我这里的 sh 有什么不同?
[编辑]
感谢您的回答!
使用 capistrano 进行部署时出现问题。它默认使用 sh 但我现在将其更改为 bash。
我无法进行正常管道的原因是当使用tail -F | grep -q --line-buffered 时,grep 不会在匹配后立即退出。必须再对文件进行一次编辑,例如 echo "" >> catalina.out,这在我的情况下是不可接受的。
【问题讨论】: