首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带grep而不是管道的fswatch

带grep而不是管道的fswatch
EN

Stack Overflow用户
提问于 2017-01-25 08:52:49
回答 2查看 269关注 0票数 2

每当我保存时,我想使用fswatch在我的单元测试框架中运行一个文件。

作为一个测试,我运行fswatch并在我的文本编辑器中对/ my /path/test.txt做了一个小的更改,并获得了我期望的输出:

代码语言:javascript
复制
$ fswatch . | xargs -I {} echo {} {}
/my/path/test.txt /my/path/test.txt

但是,如果在中间插入grep并重复该过程,则不会得到输出:

代码语言:javascript
复制
$ fswatch . | grep test | xargs -I {} echo {} {}

我做错了什么?

编辑:

fswatch + grep本身工作良好

代码语言:javascript
复制
$ fswatch . | grep test
/my/path/test.txt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-25 10:45:31

如前所述,--line-buffered告诉grep不要阻塞缓冲区输出,因此将整行立即写入标准输出。块缓冲是grep写入管道时的默认行为,行缓冲是写入终端时的默认行为。

现在:正如fswatch文档中所解释的,文件名可以包含新的行字符。因此,-0的存在(就像其他文件处理实用程序(如find )一样)。如果您告诉grep行缓冲区,并按下这样的文件,您最终将得到一个损坏的fswatch记录。

为什么不使用过滤器进行过滤呢?对于简单的过滤,它们很容易使用。这样,fswatch就可以在内部匹配文件名,而不必担心这些特性和角落情况。

票数 1
EN

Stack Overflow用户

发布于 2017-01-25 09:42:42

man grep:

代码语言:javascript
复制
   --line-buffered
          Use line buffering on output.   This  can  cause  a  performance
          penalty.

当使用grep作为最后一个管道命令时,linebuffered就是deault。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41847120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档