我曾经像这样使用fswatch v0.0.2(在本例中,当文件更改时运行django测试服)
$>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脚本中,我怎么能做到这一点?
fswatch
文档(Texinfo手册、wiki或README
)中有这样的例子:
$ fswatch [opts] -0 -o path ... | xargs -0 -n1 -I{} your full command goes here
陷阱:
xargs -0
、fswatch -0
:使用它来确保带有换行符的路径得到正确解释- CCD_ 9:使用它使CCD_;气泡;集合中的所有事件合并为一个事件,只打印集合中的记录数
-I{}
:指定占位符是xargs
在确实不希望记录(在这种情况下,由于使用了-o
,因此集合中的记录数)向下传递到正在执行的命令的情况下正确解释命令参数所错过的技巧
替代答案不与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