我曾经像这样使用fswatch v0.0.2(在这个例子中,当文件改变时运行django test suit)
$>fswatch . 'python manage.py test'
这很好。
我想排除一些导致测试每次保存运行多次的文件(Sublime文本正在保存.tmp文件,我怀疑.pyc文件也导致了这一点)
所以我升级了fswatch以启用-e模式。
然而,fswatch改变的方式导致了我的麻烦 - 它现在接受了这样的管道参数:
$>fswatch . | xargs -n1 program
我无法弄清楚如何将参数传递给程序。例如这不起作用:
$>fswatch . | xargs -n1 python manage.py test
也不是这样:
$>fswatch . | xargs -n1 'python manage.py test'
如果不在bash脚本中打包我的命令,我怎么能这样做?
答案 0 :(得分:16)
fswatch
文档(Texinfo manual,wiki或README
)都有关于如何完成此操作的示例:
$ fswatch [opts] -0 path ... | xargs -0 -n1 -I{} your full command goes here
缺陷:
-0
:使用它来确保正确解释带换行符的路径。-o
:使用它将fswatch
“冒泡”集合中的所有事件组成一个只打印集合中记录数量的事件。-I{}
:指定占位符是xargs
在做不想要记录的情况下正确解释命令参数的错过(在这种情况下,因为使用-o
,所以集合中的记录数量传递给正在执行的命令。答案 1 :(得分:15)
替代答案不打击xargs'默认原因 - 将输出作为要运行的命令的参数传递。
fswatch . | (while read; do python manage.py test; done)
这仍然有点罗嗦/合成,所以我创建了一个超简单的bash脚本fswatch-do
,它简化了我的事情:
#!/bin/bash
(while read; do $@; done)
用法:
fswatch -r -o -e 'pyc' somepath | fswatch-do python manage.py test someapp.SomeAppTestCase