fswatch用grep而不是滚边

时间:2017-01-25 08:52:50

标签: bash fswatch

每当我保存时,我想使用fswatch通过我的单元测试框架运行文件。

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

$ fswatch . | xargs -I {} echo {} {}
/my/path/test.txt /my/path/test.txt

但是如果我在中间插入一个grep并重复该过程,我就得不到输出:

$ fswatch . | grep test | xargs -I {} echo {} {}

我做错了什么?

编辑

fswatch + grep本身可以正常使用

$ fswatch . | grep test
/my/path/test.txt

2 个答案:

答案 0 :(得分:2)

man grep:

   --line-buffered
          Use line buffering on output.   This  can  cause  a  performance
          penalty.

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

答案 1 :(得分:1)

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

现在:正如fswatch文档中所述,文件名可以包含换行符。因此存在-0(如find之类的其他文件处理实用程序)。如果你告诉grep行缓冲你点击了这样的文件,你最终会得到损坏的 fswatch记录。

为什么不使用过滤器进行过滤?对于简单的过滤,它们易于使用。那样fswatch将在内部匹配文件名,而不必担心这些特性和角落案例。