「at」コマンドのスケジュールされた時間に日付を評価する

「at」コマンドのスケジュールされた時間に日付を評価する

スクリプト ファイルを使用して AT コマンドを使用していくつかのタスクを実行しますが、ログ ファイルにエコーされる日付は実行日ではなく、AT コマンドを設定した日付です。

実行終了の実際の時間を表示するにはどうすればいいでしょうか?

これは私のスクリプト ファイルの内容です:

logFILE="/tmp/loggfile.log"

if [[ -z "$1" ]]; then echo "Please specify the run time, HH:MM "; exit 1; fi
runTIME=$1

at $runTIME <<< "
echo 'Running a task....'
echo 'An other task....'
echo 'END : (`date '+%H:%M'`)' >>$logFILE
"
echo "The command was scheduled to run at $runTIME"

もし私がそれを16:00の場合./script.sh 23:20、タスクは23:20しかし、ログファイルにはEND : (16:00)

どのような助けでもいただければ幸いです。

答え1

date構文が二重引用符で囲まれているため、スクリプトの実行時に実行されます`…`。また、内側の一重引用符で囲まれていますが、最も外側の引用符がカウントされます。結果はat「表示」されません`date …`が、その出力が表示されます。

外側の引用符を一重引用符、内側の引用符を二重引用符にします。at文字列全体がそのまま取得されます。適切なタイミングで実行され、二重引用符でsh囲まれてから評価されます。`date …`date

at "$runTIME" <<< '
echo "Running a task...."
echo "An other task...."
echo "END : (`date +%H:%M`)" >>"$logFILE"
'

最も内側の単一引用符 ( '+%H:%M') を削除したことに注意してください。私のバージョンでは、文字列を に渡すときに単一引用符が消えてしまいますがat、コードは単一引用符がなくても動作します。

関連情報