Unix: 指定された時間までスリープする

Unix: 指定された時間までスリープする

コマンドラインで指定された時間までスリープする (準) 標準 Unix コマンドはありますか? 言い換えると、sleep継続時間ではなくウェイクアップ時間を取る類似のものを探しています。

例えば:sleeptill 05:00:00

何かをコード化することはできますが、すでに何かが存在する場合は、車輪の再発明はしたくありません。

ボーナス質問: タイムゾーン ( のように) を取得できれば素晴らしいと思いますsleeptill 05:00:00 America/New_York

編集私がやっていることの性質上、「T 時にコマンドを実行する」ソリューションではなく、「T までスリープする」ソリューションを探しています。

編集誤解のないように言うと、18:00 にコマンドを実行し、17:00 に起動するように指示した場合、23 時間 (または、夏時間に関連する一部の特殊なケースでは、22 時間または 24 時間) スリープすることになります。

答え1

適切な date コマンドがあり、bash を使用している Unix では、%s時刻の計算にこの形式を使用できます。

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
  • 1700午後5時です。
  • -j日付を実際に設定しないように日付に指示します。

答え2

これはどうでしょう (w00t と Gille のアイデアを 1 つの関数に組み合わせる)?

function sleep_until {
  seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
  echo "Sleeping for $seconds seconds"
  sleep $seconds
}

使用法:

sleep_until 8:24
Sleeping for 35 seconds

sleep_until '23:00'
Sleeping for 52489 seconds

sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds

答え3

Linux/Unixをチェックat指示午前 5 時の例を使用します。

at 05:00 some_command

タイムゾーンもサポートしています:

時間が協定世界時であることを指定するには、GMT、UCT、または ZULU (大文字と小文字は区別されません) のタイムゾーン名を続けることができます。他のタイムゾーンは、TZ 環境変数を使用して指定できます。

関連情報