0

下面的代码在我运行它时给了我一个错误,我看不到我哪里出错了。

我也看过男人。

while [inotifywait -m -r -e modify -e move -e create -e delete '/home/client/Files' ]; do
    echo "File Notification" | mail -s "Client File Notification" -t "test@test.com"
done
4

3 回答 3

3

[是一个做测试的命令。您不想测试有关 inotify 的内容,但想测试该命令的结果。所以支架[ ... ]太多了。你必须写:

while inotifiwait ... ;do

或更好

while array_answer=($(inotifywait ...)); [ "$array_answer" ] ;do
    echo Event is: ${array_answer[0]}
    echo file is: ${array_answer[1]}
    ...
    done
于 2012-10-25T20:04:06.287 回答
2

[实际上是一个命令名称,是 的同义词test,因此您需要在其前后使用空格。

改变这个:

while [inotifywait ... ]; do

对此:

while [ inotifywait ... ]; do

如果没有空格,shell 可能会尝试执行一个名为 的命令[inotifywait,而该命令可能不存在。(您应该已经在问题正文中向我们展示了错误消息;我最初没有注意到您在标题中引用了它。)

(请注意,可以;紧跟在]之后,因为;它是一个 shell 元字符。)

于 2012-10-25T19:32:05.110 回答
1

虽然 F. Hauri 关于 while 条件中的错误是正确的,但这并不能解释“错误接近意外令牌'完成'”错误。您发布的命令中没有任何内容会导致此错误,因此我怀疑您的文件中可能有不可见的字符,可能在行尾有回车(它们是 Windows/DOS 文本文件的标准)。尝试查看脚本cat -v并在行尾查找“^M”或其他任何奇怪的东西。

如果问题是错误的回车,请使用dos2unix删除它们,然后切换到一开始不添加它们的文本编辑器。

于 2012-10-25T20:50:53.323 回答