2012-09-20 5 views
10

क्या लिनक्स शैल स्क्रिप्ट से कैननिकल टाइम जोन नाम प्राप्त करने का कोई तरीका है? उदाहरण के लिए, यदि मेरा कॉन्फ़िगर किया गया समय क्षेत्र पीडीटी है, तो मैं "अमेरिका/लॉस_एंजेलस" प्राप्त करना चाहता हूं।शैल स्क्रिप्ट में कैनोलिक टाइम जोन नाम प्राप्त करना

मुझे पता है कि अगर मैं कॉन्फ़िगर किया गया था तो मैं प्रतीकात्मक लिंक/आदि/लोकलटाइम से प्राप्त कर सकता हूं, लेकिन जैसा कि यह सभी सर्वरों में कॉन्फ़िगर नहीं किया जा सकता है, मैं उस पर भरोसा नहीं कर सकता।
दूसरी तरफ, मैं कमांड जोन नाम कमांड दिनांक +% जेड के साथ प्राप्त कर सकता हूं, लेकिन मुझे अभी भी कैनोलिक नाम की आवश्यकता है।

वहाँ एक रास्ता या तो वर्तमान समय क्षेत्र का प्रामाणिक नाम मिलता है या समय क्षेत्र तिथि +% जेड कमांड के साथ मिल को बदलने के लिए है, भले ही प्रतीकात्मक कड़ी/etc/स्थानीयसमय सेट नहीं है?

+1

मैं कहूंगा कि 'पीडीटी' एक विहित नाम के करीब है, जबकि 'America/Los_Angeles' सही समय क्षेत्र के लिए एक स्थान का नक्शा बनाने के लिए सिर्फ एक वर्णनात्मक लेबल है। – chepner

+1

मुझे नहीं लगता कि यह संभव है; एक संक्षिप्त संक्षेप, भले ही अनजाने में विस्तार किया गया हो (उदाहरण के लिए "प्रशांत डेलाइट टाइम"), में कई संबंधित टीजेड-डेटाबेस प्रविष्टियां हो सकती हैं। उदाहरण के लिए, पीडीटी न केवल 'अमेरिका/लॉस_एंजेल' है, बल्कि 'अमेरिका/डॉसन', 'अमेरिका/एनसेनाडा', 'अमेरिका/सीटका', 'अमेरिका/तिजुआना', 'अमेरिका/वैंकूवर', 'अमेरिका/व्हाइटहॉर्स' , और 'यूएस/प्रशांत'। (वास्तव में, अगर आपने यह निर्दिष्ट नहीं किया था कि आप 'अमेरिका/लॉस_एंजेलस' चाहते हैं, तो मुझे लगता है कि आप 'यूएस/प्रशांत' चाहते थे।) – ruakh

उत्तर

19

यह लगता है की तुलना में यह अधिक जटिल है। अधिकांश लिनक्स वितरण अलग-अलग करते हैं इसलिए ओल्सन टीजेड नाम प्राप्त करने के लिए कोई 100% विश्वसनीय तरीका नहीं है। अगर यह इसका इस्तेमाल मौजूद है,

  1. पहले जांच कर लें/etc/समय क्षेत्र:

    नीचे अनुमानी है कि मैं अतीत में प्रयोग किया गया है।

  2. अगला जांच करता है, तो/etc/स्थानीयसमय समय क्षेत्र डेटाबेस के लिए एक सिमलिंक है
  3. अन्यथा एक फ़ाइल/फ़ाइल के रूप में एक ही सामग्री साथ zoneinfo/usr/share में/etc/स्थानीयसमय

untested है लगता है उदाहरण के कोड:

if [ -f /etc/timezone ]; then 
    OLSONTZ=`cat /etc/timezone` 
elif [ -h /etc/localtime ]; then 
    OLSONTZ=`readlink /etc/localtime | sed "s/\/usr\/share\/zoneinfo\///"` 
else 
    checksum=`md5sum /etc/localtime | cut -d' ' -f1` 
    OLSONTZ=`find /usr/share/zoneinfo/ -type f -exec md5sum {} \; | grep "^$checksum" | sed "s/.*\/usr\/share\/zoneinfo\///" | head -n 1` 
fi 

echo $OLSONTZ 

ध्यान दें कि यह त्वरित उदाहरण इस मामले में जहां कई TZ नाम दिए गए फ़ाइल से मेल खाते हैं (जब/usr/share/zoneinfo में देख) संभाल नहीं करता है। उपयुक्त टीजेड नाम को असंबद्ध करना आपके आवेदन पर निर्भर करेगा।

-nick

+0

ठीक है, यह वही नहीं है जो मैं ढूंढ रहा था, लेकिन यह काम करेगा। धन्यवाद :) –

संबंधित मुद्दे