パイプで時計を使用する


179

このコマンドを実行したい:

watch -n 1 tail -n 200 log/site_dev.log | grep Doctrine

しかし、grepはテールではなくウォッチで実行しようとするため、「実行すると思う」ため、実行されません...

のような何かをする方法はありますか

watch -n 1 (tail -n 200 log/site_dev.log | grep Doctrine)

どうもありがとう!

回答:


269

コマンドを引用符で囲みます

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

2
パイプラインに引用符(などawk '{print $3}')も含まれている場合はどうなりますか?編集:このように
OrangeDog

2
あなたはすなわち、\でこれらの文字をエスケープすることができますwatch -n 'awk \'{print $3}\''
LEV

29

私は間違っているかもしれませんが、これは同じこと(追加されると一致するログ行を表示する)をより簡単に達成しないでしょうか?

tail -f -n 200 log/site_dev.log | grep Doctrine

6
CPUに関する限り、これはより効率的かもしれないことに同意しますが、トピック「パイプでのウォッチの使用」のコンテキストでは、ウォッチを使用しないので、答えはありません。これは、ウォッチとパイプがテールのコンテキストではなく頻繁に表示されるように見えるため、質の悪い例の質問の場合です。
チューダー14年

1
いいえ、あなたは手段と終わりを混同していると思います。ユーザーは明らかにDoctrine成長しているファイルに到着することを望んでいましたwatch。そして、彼がツールボックスを見ると、彼が見つけた唯一のものはでした。彼が本当に知る必要があったのはtail -f。また、参照meta.stackexchange.com/questions/66377/what-is-the-xy-problem
dland

10
これらはどちらも受け入れられる答えだと思います。最上位の受け入れられた回答は、提示された正確な質問に正しく回答します。この回答は、OPが自分で作成したXY問題を正しく識別し、そもそも本当に望んでいたソリューションを提供します。両方の答えは、この質問に出くわした人にとって簡単に役立つでしょう。
cdhowie

2
私は見る方法を探していました、shellcheck *.sh | grep line | wc -lそして、受け入れられた答えは私にとって役に立ちました。
アメディーヴァンガッセ

2

コマンドを引用符で囲むことができます。

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

コマンドに引用符が含まれている場合、適切なエスケープを使用して異なるタイプの引用符を使用できます。

watch -n 1 $'tail -n 200 log/site_dev.log | fgrep \'Doctrine.*\''

本当に賢いことをしようとしている場合は、1つまたは複数のコマンドをスクリプトに入れて、それをwatchで使用します。

cat <<EOF >/tmp/watch-command
tail -n 200 $(pwd)/log/site_dev.log | fgrep Doctrine
EOF
chmod +x /tmp/watch-command
watch /tmp/watch-command

必要に応じて、相対パスを考慮してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.