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

Guy*_*den 13 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脚本中打包我的命令,我怎么能这样做?

Enr*_*omo 16

fswatch文档(Texinfo手册wiki或者README)都有如何完成此操作的示例:

$ fswatch [opts] -0 path ... | xargs -0 -n1 -I{} your full command goes here
Run Code Online (Sandbox Code Playgroud)

陷阱:

  • -0:使用它来确保正确解释具有换行符的路径.
  • -o:使用它将fswatch集合中的所有事件"冒泡"到一个只打印集合中的记录数量.
  • -I{}:指定一个占位符是你错过了的伎俩xargs在这些情况下,您正确地解释你的命令参数不想记录(在这种情况下,由于-o使用,该组中的记录数)传递下来的命令是执行.


Guy*_*den 16

替代答案不是打击xargs的默认原因 - 将输出作为要运行的命令的参数传递.

fswatch . | (while read; do python manage.py test; done)

这仍然有点罗嗦/合成,所以我创建了一个超级简单的bash脚本fswatch-do,为我简化了一些事情:

#!/bin/bash  
(while read; do $@; done)
Run Code Online (Sandbox Code Playgroud)

用法:

fswatch -r -o -e 'pyc' somepath | fswatch-do python manage.py test someapp.SomeAppTestCase