以下代码在运行时给出了一个错误,我无法看到出错的地方。
我也抬起头来。
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
答案 0 :(得分: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
答案 1 :(得分:2)
[
实际上是一个命令名,是test
的同义词,所以你需要前后空格。
改变这个:
while [inotifywait ... ]; do
到此:
while [ inotifywait ... ]; do
如果没有空间,shell可能会尝试执行一个名为[inotifywait
的命令,这个命令可能不存在。 (您应该在问题正文中向我们显示错误消息;我最初没有注意到您在标题中引用了它。)
(请注意,;
可以紧跟]
,因为;
是shell元字符。)
答案 2 :(得分:1)
虽然F. Hauri对于while条件中的错误是正确的,但这并不能解释“意外令牌'完成'附近的错误”错误。您发布的命令中没有任何内容导致此错误,因此我怀疑您可能在文件中有不可见的字符,可能在行的末尾回车(它们是Windows / DOS文本文件的标准)。尝试使用cat -v
查看脚本,并在行尾或其他任何奇怪的地方查找“^ M”。
如果问题是错误的回车,请使用dos2unix
将其删除,然后切换到不首先添加它们的文本编辑器。