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 が終了しないためです。のようなファイルをもう 1 つ編集する必要がありecho "" >> catalina.out
、これは私の状況では受け入れられませんでした。