2009-06-09 3 views
7

Ich habe ein kleines Bash-Skript, das den Computer nach einer bestimmten Anzahl von Minuten aussetzt. Ich möchte es jedoch erweitern, um mir zu sagen, wie spät es sein wird, wenn es gesperrt wird, damit ich eine ungefähre Vorstellung davon bekommen kann, wie lange ich noch so viel Zeit habe.Bash Datum/Uhrzeit Arithmetik

#!/bin/sh 
let SECS=$1*60 
echo "Sleeping for" $1 "minutes, which is" $SECS "seconds." 
sleep $SECS && 
pm-suspend 

Das einzige Argument für das Skript wird sein, wie viele Minuten der Computer angehalten werden soll. Alles, was ich zu diesem Skript hinzufügen möchte, ist im Grunde ein echo, sagend z. "Schlafen bis HH: nn: ss!". Irgendwelche Ideen?

Antwort

9

Wie herausgefunden.

echo "The computer will be suspended at" $(date --date "now $1 minutes") 
+3

gebe es zu; Du hast diese Frage gestellt, damit du sie beantworten und das "Selbstlerner" -Abzeichen erhalten kannst. :-) – glenra

+0

Haha, nein, ernsthaft. Ich denke, ich habe dieses Abzeichen sowieso schon? Nein, habe ich nicht. Nein, aber ich fand es einfach nicht so einfach. –

1

Auf BSD-basierten Systemen, würden Sie

date -r $(($(date "+%s") + $1 * 60)) 

heißt nutzen das aktuelle Datum in Sekunden erhalten, die Anzahl der Minuten hinzuzufügen, und führen Sie es bis jetzt zurück.
Ja, es ist etwas weniger elegant.

+0

@Chris Ich denke Formatierung vermasselte Sie dort oben ... es gibt kein Ende ' –

+0

löschte meine Back-Ticks Kommentar, da es Teil einer Antwort unter – Chris

+0

interessanter für mich ist die Verwendung der $ -Syntax, um die Datumsfunktion anstelle von auszuführen einzelne Zurück-Anführungszeichen. – Chris

1

auf Linux

SECS=`date "+$s"` 
SECS=$((SECS + $1 * 60)) 
date --date $SECS 
+0

Ich denke Formatierung vermasselt dich da oben ... es gibt kein Ende ' –

+0

Ich habe Backslashes hinzugefügt, um den Backticks zu entkommen. Fest. – Chris