2009-06-09 16 views
7

Tengo un pequeño script Bash que suspende el equipo después de un número determinado de minutos. Sin embargo, me gustaría extenderlo a dime cuál será el momento en que se suspenderá, para que pueda obtener una idea aproximada de cómo mucho tiempo que me queda por así decirlo.Bash fecha/hora aritmética

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

El único argumento para el script será cuántos minutos a partir de ahora se debe suspender el equipo. Todo lo que quiero agregar a este script es básicamente un echo diciendo, por ejemplo, "Durmiendo hasta HH: nn: ss!". ¿Algunas ideas?

Respuesta

9

descubierto cómo.

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

admitirlo; usted acaba de hacer esta pregunta para que pueda responderla y obtener la insignia de "autoaprendizaje". :-) – glenra

+0

Jaja, no, en serio. Creo que ya tengo esa insignia de todos modos? No, no lo hice. No, pero simplemente no pensé que fuera así de fácil. –

1

En los sistemas derivados de BSD, que tendría que utilizar

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

es decir, obtener la fecha actual en segundos, añadir el número de minutos, y alimentar de nuevo hasta la fecha.
Sí, es un poco menos elegante.

+0

@ Chris Creo que el formato atornilla allí ... no hay terminando ' –

+0

eliminado mi comentario de back-garrapatas, ya que es parte de una respuesta a continuación – Chris

+0

más interesante para mí es el uso de la sintaxis $ para ejecutar la función de la fecha en lugar de comillas simples. – Chris

1

en Linux

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

Creo que el formato atornilla allí ... no hay terminando ' –

+0

añadí barras invertidas para escapar de los acentos abiertos. fijo. – Chris