2009-06-09 11 views
7

मेरे पास एक छोटी बैश स्क्रिप्ट है जो कुछ मिनटों के बाद कंप्यूटर को निलंबित करती है। हालांकि, मैं इसे विस्तारित करना चाहता हूं कि मुझे यह बताने के लिए कि समय कब होगा, इसलिए मुझे यह पता चल सकता है कि बोलने के लिए मैंने कितना समय छोड़ा है।बैश तिथि/समय अंकगणित

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

स्क्रिप्ट के लिए एकमात्र तर्क यह होगा कि अब कंप्यूटर से कितने मिनट निलंबित किए जाने चाहिए। मैं इस स्क्रिप्ट में जोड़ना चाहता हूं मूल रूप से echo कह रहा है उदा। "एचएच तक सो रहा है: एनएन: एसएस!"। कोई विचार?

उत्तर

9

पता चला कि कैसे।

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

इसे स्वीकार; आपने अभी इस सवाल से पूछा है कि आप इसका उत्तर दे सकें और "स्वयं-शिक्षार्थी" बैज प्राप्त कर सकें। :-) – glenra

+0

हाहा, नहीं, गंभीरता से। मुझे लगता है कि मेरे पास पहले से ही बैज है? नहीं, मैंने नहीं किया। नहीं, लेकिन मुझे नहीं लगता था कि यह आसान था। –

1

बीएसडी व्युत्पन्न प्रणालियों पर, आप का उपयोग करना चाहते

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

अर्थात सेकंड में आज की तारीख मिल मिनट की संख्या जोड़ने के लिए, और आज तक इसे वापस फ़ीड।
हाँ, यह थोड़ा कम सुरुचिपूर्ण है।

+0

@ क्रिस मुझे लगता है कि फ़ॉर्मेटिंग ने आपको वहां खराब कर दिया है ... कोई अंत नहीं है ' –

+0

मेरी बैक-टिक्स टिप्पणी हटा दी गई है क्योंकि यह – Chris

+0

से नीचे दिए गए उत्तर का हिस्सा है मेरे लिए अधिक दिलचस्प है, बजाय तिथि फ़ंक्शन निष्पादित करने के लिए $ वाक्यविन्यास का उपयोग एकल वापस उद्धरण। – Chris

1
लिनक्स पर

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

मुझे लगता है कि स्वरूपण आपको वहां खराब कर देता है ... कोई अंतराल नहीं है ' –

+0

मैंने बैकटिक्स से बचने के लिए बैकस्लाश जोड़ा। तय की। – Chris