私はこの解決策を見つけました: https://stackoverflow.com/questions/7178888/grep-q-not-exiting-with-tail-f
しかし、他の可能性もありますか?
UPD:したいのですが、tail -f | grep -q something && echo 'found!'
tail -fはパイプが閉じることを防ぎ、echo
コマンドを実行する機会がないため動作しません。
答え1
そうすることによる責任は自分にあります。
tail -n 0 -f /tmp/bar | { grep -q -m1 zoo && echo found ; pkill -P $$ '^tail$' ; }
pkill
一致が最後の行にある場合は、このコマンドが必要です。ただし、tail
同じ親プロセスがある場合は、バックグラウンドで別のプロセスを終了できます。
答え2
私はあなたがgrep
's-q
または-m
オプションを使用したいと思います。実際に一致する行を表示するにはを使用してください-m1
。これにより、行が印刷され終了します(aを送信するとSIGPIPE
終了tail
します)。その行を見たくない場合は、最初の項目が見つかったときに-q
終了します。