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

问题描述 投票:0回答:3

我曾经像这样使用 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 脚本中的情况下执行此操作?

macos bash watch fswatch
3个回答
26
投票

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

$ fswatch [opts] -0 -o path ... | xargs -0 -n1 -I{} your full command goes here

陷阱:

  • xargs -0
    fswatch -0
    :使用它来确保正确解释带有换行符的路径。
  • fswatch -o
    :用它来
    fswatch
    将集合中的所有事件“冒泡”到一个事件中,仅打印集合中的记录数。
  • -I{}
    :指定占位符是您在
    xargs
    不想要记录的情况下正确解释命令参数时错过的技巧(在这种情况下,由于使用了 -o,记录数在集合中)被传递到正在执行的命令。
    
        

26
投票

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

    


0
投票

function run_on_save () { fswatch -0 -o $1 | xargs -0 -n1 -I{} ${@:2} }

它将第一个参数 (
$1

) 传递给 fswatch,并将其余参数 (${@:2}) 传递给 xargs。

要使用它,请执行 

run_on_save <path to watch> <command to run>

示例

    每次运行
  1. myfile.txt

    时打印“hello”:

    run_on_save myfile.txt echo "hello"
    
    

  2. 每次在 python 项目中编辑文件时运行 python 测试(
  3. 有更好的方法来做到这一点

    ):

  4. run_on_save project_folder pytest .
欢迎改进。

© www.soinside.com 2019 - 2024. All rights reserved.