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

スペースがないと、シェルはおそらく[inotifywait存在しないと呼ばれるコマンドを実行しようとします。(質問の本文にエラーメッセージを表示する必要がありました。タイトルに引用されていることに最初は気づきませんでした。)

(はシェルのメタキャラクタであるため、の;直後に を続けても問題ないことに注意してください。)];

于 2012-10-25T19:32:05.110 に答える
1

F. Hauri は while 条件の誤りについては正しいのですが、それは「予期しないトークン 'done' に近いエラー」エラーを説明していません。あなたが投稿したコマンドにはこのエラーの原因となるものは何もないので、ファイルに目に見えない文字が含まれている可能性があり、行末にキャリッジリターンが含まれている可能性があります (Windows/DOS テキストファイルの標準です)。でスクリプトを表示してみてcat -v、行末の「^M」など、おかしなところを探してください。

問題が間違ったキャリッジ リターンである場合は、 を使用dos2unixしてそれらを削除してから、そもそもそれらを追加しないテキスト エディターに切り替えます。

于 2012-10-25T20:50:53.323 に答える