
スクリプト ファイルを使用して 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
、コードは単一引用符がなくても動作します。