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

最佳答案

如前所述,--line-buffered告诉grep不要阻塞缓冲区输出,因此立即将整行写入标准输出。块缓冲是grep写入管道时的默认行为,行缓冲是写入终端时的默认行为。
现在:如fswatch文档中所述,文件名可以包含新行字符。因此存在“cc>”(如其他文件处理实用程序,如-0)。如果您告诉find到行缓冲区,并且您命中了这样的文件,您将得到一个损坏的grep记录。
为什么不使用过滤器来过滤呢?对于简单的过滤,它们很容易使用。这样,fswatch将在内部匹配文件名,而不必担心这些特性和角点大小写。

关于bash - 带grep的fswatch未管道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41847120/

10-10 17:37