2009-06-09 15 views
7

Ho un piccolo script Bash che sospende il computer dopo un determinato numero di minuti. Tuttavia, mi piacerebbe estenderlo per dirmi quale sarà il momento in cui sarà sospeso, quindi posso avere un'idea approssimativa di quanto tempo mi rimane per così dire.Bash data/ora aritmetica

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

L'unico argomento per lo script sarà quanti minuti da ora il computer dovrebbe essere sospeso. Tutto ciò che voglio aggiungere a questo script è fondamentalmente un echo, ad es. "Dormire fino a HH: nn: ss!". Qualche idea?

risposta

9

Abbiamo scoperto come.

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

ammetterlo; hai appena fatto questa domanda in modo da poter rispondere e ottenere il badge "auto-apprendista". :-) – glenra

+0

Haha, no, sul serio. Penso di avere già quel distintivo comunque? No, non l'ho fatto. No, ma non pensavo fosse così facile. –

1

Su sistemi derivati ​​da BSD, utilizza

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

cioè ottenere la data corrente in secondi, aggiungere il numero di minuti, e alimentano di nuovo fino ad oggi.
Sì, è leggermente meno elegante.

+0

@Chris penso che la formattazione ti abbia fregato lassù ... non c'è fine ' –

+0

eliminato il mio commento sui back tick visto che fa parte di una risposta sotto – Chris

+0

più interessante per me è l'uso della sintassi $ per eseguire la funzione data invece di virgolette singole. – Chris

1

su linux

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

Penso che la formattazione ti abbia fregato lassù ... non c'è fine ' –

+0

Ho aggiunto barre invadenti per evitare i backtick. fisso. – Chris