2009-06-09 12 views
7

J'ai un petit script Bash qui suspend l'ordinateur après un certain nombre de minutes. Cependant, je voudrais prolonger cela pour me dire quel sera le moment où il sera suspendu, afin que je puisse avoir une idée approximative du temps qu'il me reste pour parler.Arithmétique date/heure de Bash

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

Le seul argument du script sera le nombre de minutes à partir duquel l'ordinateur doit être suspendu. Tout ce que je veux ajouter à ce script est fondamentalement un echo disant ex. "Dormir jusqu'à HH: nn: ss!". Des idées?

Répondre

9

Découvrez comment.

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

l'admettre; vous venez de poser cette question pour que vous puissiez y répondre et obtenir le badge «auto-apprenant». :-) – glenra

+0

Haha, non, sérieusement. Je pense que j'ai déjà ce badge de toute façon? Non, je ne l'ai pas fait. Non, mais je ne pensais pas que c'était si facile. –

1

Sur les systèmes dérivés de BSD, vous utiliseriez

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

dire obtenir la date actuelle en quelques secondes, ajoutez le nombre de minutes, et les aliments pour revenir à ce jour.
Oui, c'est un peu moins élégant.

+0

@Chris Je pense que le formatage vous a vissé là-bas ... il n'y a pas de fin ' –

+0

a supprimé mon commentaire back-ticks car il fait partie d'une réponse ci-dessous – Chris

+0

plus intéressant pour moi est l'utilisation de la syntaxe $ pour exécuter la fonction date au lieu de citations arrière simples. – Chris

1

sur linux

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

Je pense que le formatage vous a vissé là-bas ... il n'y a pas de fin ' –

+0

J'ai ajouté des barres obliques inverses pour échapper aux backticks. fixé. – Chris