質問: ターミナルからだと正常に結果が得られるスクリプトを、このようにcronに登録しても全く反応しません。 * * * * * for i in $(seq 0 30 59); do (sleep ${i}; ~/test.sh) & done; しかしこのようにするととりあえず正常に結果が得られます。 * * * * * for i in $(seq 0 30 59); do (sleep ${i}; bash ~/test.sh) & done; bashは超初心者で調べてやったら、たまたまどうにか動いただけなのでよくわかりません。 test2.shというファイルに「touch ~/touch.txt」とだけ記入して、このようにcronを設定してみましたが、これもうまくいきました。。 * * * * * for i in $(seq 0 30 59); do (sleep ${i}; ~/test2.sh) & done; test.shは40行ぐらいですが、上の行から順番に「touch ~/touch.txt」と記入していくと、最初の10行ぐらいまではtouch.txtが生成されますが、ある段落を超えるとそれ以降に記入した場合、touch.txtが生成されません。 ある段落とは次の行です。 for ((i=0; i<=10; i++)); do array+=("$(head -n $i $(dirname $0)/test.csv | tail -1)") done この段落もコピペしてきただけなので、十分に理解できているわけではありません。 どのへんに問題があるのか、「bash ~/test.sh」としなくても動くようにするにはどうしたらよいか、その必要はあるかなどを教えてください。 よろしくお願いします。 別件になるかもしれませんが、cronからこのコマンドを実行した場合、反応しなかったのでネットで調べて次のように変更してみましたが、この変更は問題ないでしょうか? notify-send -u critical -t 10000 'message' export DISPLAY=:0 && notify-send -u critical -t 10000 'message'
回答: `~/test2.sh`でうまく動かず、`bash ~/test2.sh`でうまく動くということですよね。 `test2.sh`の1行目が`#!/bin/sh`になっているのであれば、`#!/bin/bash`に書き換えてみてください。