2009-06-09 3 views
7

У меня есть небольшой скрипт Bash, который приостанавливает работу компьютера по истечении заданного количества минут. Тем не менее, я хотел бы продлить его, чтобы рассказать мне, какое время будет, когда он будет приостановлен, поэтому я могу получить общее представление о том, как долго я ушел так говорить.Арифметика даты/времени Bash

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

Единственный аргумент сценария будет состоять в том, сколько минут после этого компьютер должен быть приостановлен. Все, что я хочу добавить к этому скрипту, - это, в основном, echo. «Спящий до HH: nn: ss!». Есть идеи?

ответ

9

Обнаружено как.

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

признать это; вы просто задали этот вопрос, чтобы вы могли ответить на него и получить значок «самостоятельного ученика». :-) – glenra

+0

Ха-ха, нет, серьезно. Кажется, у меня уже есть этот значок? Нет, нет. Нет, но я просто не думал, что так легко. –

1

В BSD-системах, основанных, вы бы использовать

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

т.е. получить текущую дату в секундах, добавьте количество минут, и кормить его обратно на сегодняшний день.
Да, это немного менее элегантно.

+0

@Chris Я думаю, что форматирование привинчило вас там ... нет конца ' –

+0

удалил мой комментарий назад, так как это часть ответа ниже – Chris

+0

, более интересным для меня является использование синтаксиса $ для выполнения функции даты вместо одиночные обратные кавычки. – Chris

1

на Linux

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

Я думаю, что форматирование привинчило вас там ... нет конца ' –

+0

Я добавил обратную косую черту, чтобы избежать обратных шагов. исправлено. – Chris

Смежные вопросы