2

每当我保存时,我都想使用 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
4

2 回答 2

2

人grep:

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

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

于 2017-01-25T09:42:42.993 回答
1

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

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

你为什么不使用过滤器过滤呢?对于简单的过滤,它们很容易使用。这种方式fswatch将在内部匹配文件名,而不必担心这些特殊性和极端情况。

于 2017-01-25T10:45:31.503 回答