2009-06-09 7 views
7

私は、指定された分数後にコンピュータをサスペンドする少しの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

BSD派生システム上

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

はそれを認めます。あなたはちょうどあなたがそれに答えることができ、 "自己学習者"バッジを得るためにこの質問をしました。 :-) – glenra

+0

ハハ、いや、真剣に。私はすでにそのバッジを持っていると思いますか?いいえ、私はしませんでした。いいえ、でも、これは簡単だとは思わなかった。 –

1

、あなたは、秒単位で現在の日付を取得する分の数を追加し、バック日にそれを養う

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

すなわちを使用すると思います。
ええ、ややエレガントです。 Linux上

+0

@Chris私は書式設定があなたをそこに釘付けにしたと思う...終わりはない –

+0

答えが – Chris

+0

であるので、バックティックスのコメントが削除されているので、もっと興味深いのは、$構文を使用して、シングルバッククォート。 – Chris

1

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

私は書式設定があなたをそこにねじ込んだと思う...終わりはない。 –

+0

バックスティックをエスケープするためにバックスラッシュを追加した。一定。 – Chris