crontabでスクリプトが機能しない

crontabでスクリプトが機能しない

似たような質問がたくさんあることを知り、公開された提案を試しましたが、うまく動作しないようです。以下は私のコードです。

#!/bin/bash

while IFS="" read -d "" -r filename;
do
filearray[i++]="$filename"
done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0)
printf '%s\n' "${filearray[0]}"

簡単に言えば、特定のディレクトリにあるすべてのtxt形式ファイルを検索して配列に入れて最後に表示したいと思います。コマンドラインから実行しても問題はありません。良い結果。 crontabを介してこれを実行すると、次のエラーが発生します。

syntax error near unexpected token `<'
`done < <(find . -maxdepth 1 -type f -iname "*.txt" -print0)'

これはcronエントリ自体です。

* * * * * . /usr/online/scripts/test.sh 2>> /usr/online/scripts/log/test.log

スクリプトがコマンドラインでは実行されますが、crontabでは実行されないのはなぜですか?シェルを宣言していますが、crontabはシェルを使用する必要がありますか?私がこれを行うもう一つの理由はありますか?

ジャッキー

ベストアンサー1

command < <(other command)バシズム。 Shebang行を指定したので、次のことを行う必要があります。いいえcrontabでシェルを指定すると非常に混乱します。次のいずれかを選択する必要があります。私は本当にshebangラインが大好きです。これは、通常のシェルスクリプトであるふりをするのではなく、その背後にある構文を明示的に作成するためです。

ああ、スクリプトが実行可能であることを確認し、ただ /path/to/your/script.shcrontab コマンドフィールドでいいえ sh /path/to/your/script.shsh < /path/to/your/script.shさらに. /path/to/your/script.sh。最後の3つはshebang行を無視し、代わりに設定に関係なくcronシェルのコンテキストでスクリプトを実行します。

バラよりリダイレクトのガイドラインスクリプト出力をファイルに保存する方法の詳細

おすすめ記事