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