如何运行fswatch来调用带有静态参数的程序?

时间:2014-09-05 15:46:43

标签: macos bash watch fswatch

我曾经像这样使用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脚本中打包我的命令,我怎么能这样做?

2 个答案:

答案 0 :(得分:16)

fswatch文档(Texinfo manualwikiREADME)都有关于如何完成此操作的示例:

$ 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