在 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
这在我的情况下是不可接受的。