
Gibt es einen (halb-)standardmäßigen Unix-Befehl, der bis zu der in der Befehlszeile angegebenen Zeit in den Ruhezustand wechselt? Mit anderen Worten: Ich suche nach etwas Ähnlichem, sleep
das eher die Weckzeit als die Dauer in Anspruch nimmt.
Zum Beispiel:sleeptill 05:00:00
Ich kann etwas programmieren, möchte aber das Rad nicht neu erfinden, wenn es bereits etwas gibt.
Bonusfrage: Es wäre toll, wenn es die Zeitzone (wie in sleeptill 05:00:00 America/New_York
) berücksichtigen könnte.
bearbeitenAufgrund der Art meiner Tätigkeit suche ich eher nach einer „Schlafen bis T“-Lösung als nach einer „Befehl bei T ausführen“-Lösung.
bearbeitenUm Missverständnissen vorzubeugen: Wenn ich den Befehl um 18:00 Uhr ausführe und ihm sage, dass er um 17:00 Uhr aufwachen soll, erwarte ich, dass er 23 Stunden schläft (oder in einigen Sonderfällen, die mit der Sommerzeit zu tun haben, 22 oder 24 Stunden).
Antwort1
Wenn Sie ein Unix-System mit einem geeigneten Datumsbefehl verwenden und Bash nutzen, können Sie das %s
Format zur Zeitberechnung nutzen.
sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
1700
es ist 17 Uhr.-j
Sagen Sie Date, dass das Datum nicht wirklich festgelegt werden soll.
Antwort2
Wie wäre es damit (die Ideen von w00t und Gille in einer Funktion zu kombinieren)?
function sleep_until {
seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
echo "Sleeping for $seconds seconds"
sleep $seconds
}
Verwendung:
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
Antwort3
Schauen Sie sich die Linux/Unixat
Befehl. Am Beispiel von 5 Uhr morgens:
at 05:00 some_command
Es unterstützt auch Zeitzonen:
Es kann ein Zeitzonenname wie GMT, UCT oder ZULU (ohne Berücksichtigung der Groß-/Kleinschreibung) folgen, um anzugeben, dass die Zeit in koordinierter Weltzeit angegeben ist. Andere Zeitzonen können mit der Umgebungsvariable TZ angegeben werden.