每当我保存时,我想使用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发布于 2017-01-25 10:45:31
如前所述,--line-buffered告诉grep不要阻塞缓冲区输出,因此将整行立即写入标准输出。块缓冲是grep写入管道时的默认行为,行缓冲是写入终端时的默认行为。
现在:正如fswatch文档中所解释的,文件名可以包含新的行字符。因此,-0的存在(就像其他文件处理实用程序(如find )一样)。如果您告诉grep行缓冲区,并按下这样的文件,您最终将得到一个损坏的fswatch记录。
为什么不使用过滤器进行过滤呢?对于简单的过滤,它们很容易使用。这样,fswatch就可以在内部匹配文件名,而不必担心这些特性和角落情况。
发布于 2017-01-25 09:42:42
man grep:
--line-buffered
Use line buffering on output. This can cause a performance
penalty.当使用grep作为最后一个管道命令时,linebuffered就是deault。
https://stackoverflow.com/questions/41847120
复制相似问题