3

在 osx 中,我试图检测何时将新文件添加到文件夹中,然后执行脚本来处理该新文件。看起来很简单,对吧?

我正在这样做:

fswatch  -0  ~/motion-detection | xargs -0 -n1 -I {} ./detectmotion.sh

这将调用 shell 脚本 detectmotion.sh,其中包括:

echo "File added: " $1

至少现在。我只想将更改文件的文件名传递给detectmotion.sh

我花了 1 美元买了一个空白

谁能看到我在这里做错了什么?

提前致谢!

4

1 回答 1

3

它应该是的,因为您没有将参数传递给detectmotion.sh您从中获得的脚本xargs。应该是

fswatch  -0  ~/motion-detection | xargs -0 -n1 -I {} ./detectmotion.sh "{}"

请记住,-I {}in 中的标志xargs代表值管道线到的占位符xargs。因此,在您尝试作为问题的一部分时,您只是将值存储在占位符({})中,而不是实际将其传递给脚本以使其有用。

所以我修改了命令,以便您实际上将接收到的值传递给脚本,现在可以$1在脚本内部访问时打印该脚本。

man xargs页面引用-I

-I replace-str
     Replace  occurrences  of  replace-str  in the initial-arguments with names read from 
     standard input.  Also, unquoted blanks do not terminate input items; instead the 
     separator is the newline character.  Implies -x and -L 1.

在我们的例子中,replace-str被用作{}.

于 2017-02-23T08:33:04.663 回答