我曾经像这样使用fswatch v0.0.2 (在这个实例中,当文件发生变化时运行django测试套件)
$>fswatch . 'python manage.py test'
这可以很好地工作。
我想排除一些导致测试在每次保存时多次运行的文件(Sublime text正在保存.tmp文件,我怀疑.pyc文件也会导致这种情况)。
所以我升级了fswatch来启用-e模式。
然而,fswatch的方式改变了,这给我带来了麻烦-它现在接受一个管道参数,如下所示:
$>fswatch . | xargs -n1 program
我不知道如何将参数传递给这里的程序。例如,这不起作用:
$>fswatch . | xargs -n1 python manage.py test
这也不是:
$>fswatch . | xargs -n1 'python manage.py test'
如何才能在不将命令打包到bash脚本中的情况下做到这一点?
发布于 2014-09-08 18:03:42
fswatch文档( Texinfo manual、wiki或README)提供了如何完成此操作的示例:
$ fswatch [opts] -0 -o path ... | xargs -0 -n1 -I{} your full command goes here陷阱:
xargs -0,correctly.fswatch -o::使用它来确保带换行符的路径被解释,并使用它使集合中的所有事件“冒泡”到单个事件中,只打印set.-I{}:中的记录数指定占位符是您在不希望将记录(在这种情况下,由于使用了-o,集合中的记录数)向下传递给正在执行的命令时,xargs无法正确解释命令参数的诀窍。发布于 2014-09-08 18:47:11
另一种答案不是反对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
https://stackoverflow.com/questions/25689589
复制相似问题