我想运行以下命令:

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)


非常感谢!

#1 楼

用引号将命令引起来

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


评论


如果管道还包含引号(例如awk'{print $ 3}')怎么办?编辑:像这样

–橙色狗
18年6月6日在16:28



您可以使用\逃脱这些字符,即观看-n'awk \'{print $ 3} \''

–lev
18/09/21在10:44



#2 楼

我可能是错的,但是这样难道不是更简单地实现相同的功能(查看匹配的日志行)吗?


评论


我同意就CPU而言,这可能更有效,但是在主题“使用带有管道的监视”的上下文中,它不使用监视,因此不是答案。这可能是一个糟糕的示例问题,因为手表和烟斗似乎经常出现在尾巴的背景下。

–tu-Reinstate Monica-dor duh
2014年1月20日,0:07

不,我认为您在混淆手段和目的。用户清楚地希望看到Doctrine收到越来越多的文件,而当他在工具箱中查看时,发现的唯一东西就是手表。他真正需要知道的是tail -f。另请参阅meta.stackexchange.com/questions/66377/what-is-the-xy-problem

– dland
16-3-21在11:03

我认为这些都是可接受的答案。最常见的答案正确地回答了提出的确切问题,并且此答案正确地标识了OP为自己创建的XY问题,并首先提供了他们真正想要的解决方案。对于遇到这个问题的人,这两个答案都可能非常有用。

– cdhowie
16-4-14在16:14



我一直在寻找观看shellcheck * .sh的方法| grep行| wc -l和可接受的答案对我很有用。

– Amedee Van Gasse
17年1月3日,12:29

#3 楼

您可以在命令前后加上引号: br />
watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'


如果您想做一些非常聪明的事情,请将一个或多个命令放在脚本中并与watch一起使用:

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


必要时请确保考虑相对路径。

#4 楼

watch正在执行命令时,请使用双引号:

watch "ls -la | wc -l"