下面的代码在我运行它时给了我一个错误,我看不到我哪里出错了。
我也看过男人。
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
下面的代码在我运行它时给了我一个错误,我看不到我哪里出错了。
我也看过男人。
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
[
是一个做测试的命令。您不想测试有关 inotify 的内容,但想测试该命令的结果。所以支架[ ... ]
太多了。你必须写:
while inotifiwait ... ;do
或更好
while array_answer=($(inotifywait ...)); [ "$array_answer" ] ;do
echo Event is: ${array_answer[0]}
echo file is: ${array_answer[1]}
...
done
[
实际上是一个命令名称,是 的同义词test
,因此您需要在其前后使用空格。
改变这个:
while [inotifywait ... ]; do
对此:
while [ inotifywait ... ]; do
如果没有空格,shell 可能会尝试执行一个名为 的命令[inotifywait
,而该命令可能不存在。(您应该已经在问题正文中向我们展示了错误消息;我最初没有注意到您在标题中引用了它。)
(请注意,可以;
紧跟在]
之后,因为;
它是一个 shell 元字符。)
虽然 F. Hauri 关于 while 条件中的错误是正确的,但这并不能解释“错误接近意外令牌'完成'”错误。您发布的命令中没有任何内容会导致此错误,因此我怀疑您的文件中可能有不可见的字符,可能在行尾有回车(它们是 Windows/DOS 文本文件的标准)。尝试查看脚本cat -v
并在行尾查找“^M”或其他任何奇怪的东西。
如果问题是错误的回车,请使用dos2unix
删除它们,然后切换到一开始不添加它们的文本编辑器。