我尝试使用fswatch从linux bash脚本翻译以下行,以便能够在Mac OSX上运行它:
inotifywait -r -m 'myfolder/' | while read MODFILE
do
echo "something"
done
由于inotifywait不能在Mac OSX上运行,我想用第一行代替FSWatch。尽管README引用了fswatch手册页,但它并没有提供链接,并且在互联网上搜索并没有给我任何东西。所以我试着搞砸了一下。
我创建了一个名为testfswatch/
的文件夹,我尝试在父文件夹中运行以下命令,然后在testfswatch/
文件夹中添加和更改文件:
fswatch -o testfswatch/ | echo "LALA"
fswatch -o testfswatch/ | someSimpleProgram
fswatch -o testfswatch/ | xargs -n1 -I{} echo "LALA"
fswatch -o testfswatch/ | xargs -n1 -I{} ./someExecutable
fswatch -o testfswatch/ | xargs -n1 echo "LALA"
fswatch -o testfswatch/ | xargs -n1 someExecutable
// And more variations of the above
当我在tesfswatch/
文件夹中更改或添加文件时,这些命令似乎都没有做任何事情。
有人知道我在这里做错了什么吗?欢迎所有提示!
答案 0 :(得分:13)
正如Bushmills已经说过的那样,fswatch
语法在与fsw
合并之后在v。> = 1.x中发生了变化:这个决定背后的理由是允许不止一条路径使用UNIX用户感觉很自然的语法观看。
此外,还添加了一个特定选项(-0
),以便轻松且不容错误地将fswatch
输出到另一个程序的输入:使用-0
时,fswatch
将使用NUL
(\0
)字符(与find
和xargs
等其他实用程序相同的行)分隔记录。
在您的情况下,您可能希望使用以下语法(根据您的需要进行微调):
$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command]
这样:
fswatch -0
将使用NUL
字符拆分记录。xargs -0
将使用NUL
字符拆分记录。这需要将阻抗与fswatch
正确匹配。xargs -n 1
将调用command
每个命令。如果您想在每个x
条记录中执行此操作,请使用xargs -n x
。xargs -I {}
将使用已解析的参数替换{}
中command
的出现次数。如果您正在运行的命令不需要事件路径名,请删除此选项。希望这有帮助。
答案 1 :(得分:2)
1.0版之前的fswatch使用稍微不同的调用语法。 确保您运行的版本低于1.0,如果您的版本早于此版本,则可能需要升级。