【问题标题】:Bash Script - fswatch trigger bash functionBash Script - fswatch 触发 bash 函数
【发布时间】:2017-09-01 11:32:13
【问题描述】:

我有一个 bash 脚本,我想在每次更改文件系统时触发一个方法:

#!/bin/bash

function run {
    echo Do some magic
    // Do some magic
}

run

fswatch . src | 'run'

在这种情况下,我正在查看src 文件夹。

当我通过

触发脚本时
./automater.sh

脚本第一次正确执行run 函数,然后当我更改某些文件时,脚本简单地退出......

【问题讨论】:

  • 我发现当我使用 fswatch 时。源代码 | ./automater.sh 运行,它工作正常,但是它在一个循环中运行......为什么?
  • 您的run 函数是否包含从标准输入读取事件的循环?如果不是,那么您的代码必须更改为fswatch . src | while read -r changed_path; do run; done

标签: bash shell triggers filesystems fswatch


【解决方案1】:

BUT then it runs in a loop....,我也打了这个,因为在你的./automater.sh执行之后,你的目录中有一些新的文件更改,你可以使用排除选项来忽略这些文件,在我的例子中是这样的:

fswatch -l 5 -o -e ".*" -i "\\.py$" . | while read; \ do \ unittest || true done

  • -l,每 5 秒检查一次文件更改
  • -o,将所有更改批处理到一个数字
  • -e,排除文件,“.*”表示先排除所有文件
  • -i,包含文件,“\.py$”表示包含所有.py文件
  • || true,在shell脚本中使用时似乎需要让你的命令返回true,我用这个技巧来解决only first time correctly问题

您还可以在单​​独的终端窗口中运行fswatch . src 和您的“运行”命令来查找新更改是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 2012-01-04
    • 2011-10-16
    • 2015-10-02
    • 2011-02-13
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多