#!/bin/bash # Usage: sleep-until <time> # Ex: sleep-until 3:00 pm DRY="${DRY:-false}" if [ -n "$1" ] && date --date="$*" > /dev/null 2>&1; then # Calculate the time in seconds to sleep by subtracting the future time from the current time SLEEP_TIME="$(( $(date -f - +%s- <<< "$*"$'\nnow') 0 ))" if [ "$SLEEP_TIME" -gt 0 ]; then if ! "$DRY"; then echo "Sleeping until: $(date --date="$*") (${SLEEP_TIME}s)" sleep "$SLEEP_TIME" else echo "$SLEEP_TIME" fi else echo "Error: input date '$*' is in the past" >&2 echo "Sadly, you cannot sleep to a time in the past" >&2 exit 1 fi else echo "Error: input date '$*' is invalid" >&2 echo "Please input a valid date" >&2 exit 1 fi