次のコードを実行するとエラーが発生します。どこが間違っているのかわかりません。
私も男を見上げました。
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
スペースがないと、シェルはおそらく[inotifywait
存在しないと呼ばれるコマンドを実行しようとします。(質問の本文にエラーメッセージを表示する必要がありました。タイトルに引用されていることに最初は気づきませんでした。)
(はシェルのメタキャラクタであるため、の;
直後に を続けても問題ないことに注意してください。)]
;
F. Hauri は while 条件の誤りについては正しいのですが、それは「予期しないトークン 'done' に近いエラー」エラーを説明していません。あなたが投稿したコマンドにはこのエラーの原因となるものは何もないので、ファイルに目に見えない文字が含まれている可能性があり、行末にキャリッジリターンが含まれている可能性があります (Windows/DOS テキストファイルの標準です)。でスクリプトを表示してみてcat -v
、行末の「^M」など、おかしなところを探してください。
問題が間違ったキャリッジ リターンである場合は、 を使用dos2unix
してそれらを削除してから、そもそもそれらを追加しないテキスト エディターに切り替えます。