1. ホーム
  2. bash

[解決済み] 指定された時間/日付まで眠る

2022-10-22 03:39:48

質問

bashスクリプトを特定の時間までスリープさせたい。そこで、間隔を取らず、終了時刻を取り、それまでスリープする "sleep" のようなコマンドが欲しいのですが、どうすればいいですか?

実行中のスクリプトを特定の日付/時間までブロックする必要があるため、"at"-demon は解決策ではありません。

そのようなコマンドはありますか?

どのように解決するのですか?

Outlaw Programmerが述べているように、正しい秒数だけスリープすれば解決すると思います。

bashでこれを行うには、以下のようにします。

current_epoch=$(date +%s)
target_epoch=$(date -d '01/01/2010 12:00' +%s)

sleep_seconds=$(( $target_epoch - $current_epoch ))

sleep $sleep_seconds

ナノ秒単位(実質的にはミリ秒程度)の精度を出すには、例えば次のような構文にします。

current_epoch=$(date +%s.%N)
target_epoch=$(date -d "20:25:00.12345" +%s.%N)

sleep_seconds=$(echo "$target_epoch - $current_epoch"|bc)

sleep $sleep_seconds

macOS / OS X は秒以下の精度をサポートしていないことに注意してください。 coreutils から brew の代わりに → をご覧ください。