每当我保存时,我想使用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
答案 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
将在内部匹配文件名,而不必担心这些特性和角落案例。