बैश स्क्रिप्ट में टाइमस्टैम्प चर बनाएं


375

मैं लॉगिंग को थोड़ा आसान बनाने के लिए शेल स्क्रिप्ट में टाइमस्टैम्प वेरिएबल बनाने की कोशिश कर रहा हूं। मैं स्क्रिप्ट की शुरुआत में वैरिएबल बनाना चाहता हूं और जब भी जारी करता हूं, तो यह वर्तमान समय का प्रिंट आउट लेता है echo $timestamp। यह अधिक कठिन साबित हो रहा है तब मैंने सोचा। यहाँ कुछ चीजें मैंने कोशिश की हैं:

timestamp="(date +"%T")" इको प्रिंट निकलता है (date +"%T")

timestamp="$(date +"%T")" इको उस समय को प्रिंट करता है जब वेरिएबल को इनिशियलाइज़ किया गया था।

अन्य चीजें जो मैंने आज़माई हैं, वे थोड़े बहुत बदलाव हैं जो किसी भी बेहतर काम नहीं करते हैं। क्या किसी को पता है कि मैं क्या करने की कोशिश कर रहा हूँ पूरा करने के लिए?

जवाबों:


309

वर्तमान टाइमस्टैम्प को प्राप्त करने के लिए और निश्चित चर को परिभाषित करने के समय के लिए नहीं, चाल एक फ़ंक्शन का उपयोग करना है और एक चर नहीं :

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T"
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

यदि आपको %Tनिर्दिष्ट द्वारा दिए गए प्रारूप पसंद नहीं है, तो आप द्वारा स्वीकार किए गए अन्य समय रूपांतरण विनिर्देशकों को जोड़ सकते हैं date। जीएनयू के लिए date, आप आधिकारिक दस्तावेज में इन बारीकियों की पूरी सूची यहां देख सकते हैं: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers


26
इस बात पर निर्भर करता है कि आप इसका उपयोग कैसे करना चाहते हैं, फिर भी आपको कमांड प्रतिस्थापन का उपयोग करने की आवश्यकता होगी echo "$(timestamp): something happened":।
Chepner

5
फ़ॉर्मेटिंग के लिए, यहाँ सबसे अधिक प्रारूपों का एक कट-एंड-ड्राइड सेट है: zxq9.com/archives/795
zxq9

175
मेरे लिए, मैं चाहता था date +"%Y-%m-%d_%H-%M-%S"
किमबॉल रॉबिन्सन

3
किसी कारण से इसने मुझे टाइमस्टैम्प नहीं दिया, लेकिन बीच में ":" के साथ वर्तमान समय।
एरिकबवर्क

7
मुझे लगता है कि बहुत से लोग इस सवाल पर पहुंचते हैं कि एक यूनिक्स टाइमस्टैम्प (जैसा कि मेरे पास है) उत्पन्न करने के लिए एक रास्ता खोज रहे हैं और इस सवाल का जवाब dchakarov द्वारा अधिक उपयोगी होना चाहिए, हालांकि यह उत्तर बेहतर तरीके से प्रश्नकर्ता के प्रश्न को संबोधित करता है।
विनीलसुपरफिरोमैन

565

यदि आप यूनिक्स टाइमस्टैम्प प्राप्त करना चाहते हैं, तो आपको उपयोग करने की आवश्यकता है:

timestamp=$(date +%s)

%Tआपको बस समय देगा; उसी तरह %H:%M:%S( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ के माध्यम से )


5
लेकिन यह चर केवल उस समय का मान रखेगा जब चर शुरू किया गया था, क्या मैं सही हूं?
सिंह

9
मुझे लगता है कि यह बहुत अधिक अपवित्र हो रहा है क्योंकि यह प्रश्न के शीर्षक का उत्तर देता है, लेकिन यह प्रश्न निकाय का उत्तर नहीं दे रहा है: डी ओपी हर बार एक अलग टाइमस्टैम्प प्राप्त करना चाहता था, जबकि यह पूरी स्क्रिप्ट के लिए एक संग्रह करेगा।
फेडोरक्वी 'एसओ ने नुकसान पहुँचाया'

1
मैं यहां ठीक इसी की तलाश में आया था। यानी एक यूनिक्स टाइमस्टैम्प प्राप्त करने के लिए उचित प्रारूप स्ट्रिंग date। हालाँकि, मैंने "सही" उत्तर भी दिया। मैं उस की तलाश नहीं कर रहा था, लेकिन यह मूल प्रश्न का बेहतर उत्तर है और यह वास्तव में मेरे लिए उपयोगी भी है।
विनीलसुपरफिरोमैन

69
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too

1
धन्यवाद, यही मैं चाहता था: मेरी स्क्रिप्ट में फिर से उपयोग करने के लिए एक चर के रूप में टाइमस्टैम्प! शेल सिंटैक्स इतना भ्रामक है।
पोटरथोर

2
मिलीसेकंड भाग जोड़ने के लिए +1। echo $(date +"%Y-%m-%dT%T.%3N%z") हालाँकि यह मुझे मैक टर्मिनल में काम करने के लिए नहीं मिल सकता है। मैक में कैसे करें। धन्यवाद
kosgeinsky

43

आईएसओ 8601 प्रारूप ( 2018-12-23T12:34:56) UNIX टाइमस्टैम्प की तुलना में अधिक पठनीय है। हालाँकि कुछ OS पर आप :फ़ाइल नाम में नहीं हो सकते । इसलिए मैं इसके बजाय कुछ इस तरह का उपयोग करने की सलाह देता हूं:

2018-12-23_12-34-56

इस प्रारूप में टाइमस्टैम्प प्राप्त करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं:

TIMESTAMP=`date +%Y-%m-%d_%H-%M-%S`

यह वह प्रारूप है जिसे मैंने कई अनुप्रयोगों का उपयोग करते देखा है। इसके बारे में एक और अच्छी बात यह है कि यदि आपकी फ़ाइल के नाम इसके साथ शुरू होते हैं, तो आप उन्हें वर्णानुक्रम में सॉर्ट कर सकते हैं और उन्हें तिथि के अनुसार क्रमबद्ध किया जाएगा।


1
धन्यवाद यह मेरे संस्करण नियंत्रण स्क्रिप्ट के लिए बहुत अच्छा है
एंडी

1
TZ=UTC date +...UTC टाइमस्टैम्प का उपयोग करके इसे और अधिक पोर्टेबल बना सकते हैं
माइकलचिरिको

17

मैं ubuntu 14.04 का उपयोग कर रहा हूं।

मेरे सिस्टम में सही तरीका होना चाहिए date +%s

का आउटपुट date +%Tजैसा है 12:25:25


15

कमांड प्रतिस्थापन का उपयोग करें:

timestamp=$( date +%T )

3
यह वही है जो मैंने पहले ही कोशिश की थी और यह केवल उस समय को प्रिंट करता है जब चर को आरंभीकृत किया गया था।
डैन

10
@ dan08: यह है कि चर कैसे काम करते हैं। यदि आप गतिशील आउटपुट चाहते हैं तो एक फ़ंक्शन का उपयोग करें।
चोरोबा

11

आप उपयोग कर सकते हैं

timestamp=`date --rfc-3339=seconds`

यह प्रारूप में वितरित करता है 2014-02-01 15:12:35-05:00

बैक-टिक ( `) वर्णों का कारण होगा कि उनके बीच क्या मूल्यांकन किया जाना है और इसका परिणाम पंक्ति में शामिल है। date --helpअन्य विकल्प हैं।


1
किस समय तक यह प्राप्त होता है, इसे स्क्रीन आउटपुट में शामिल किए जाने से तुरंत पहले निष्पादित किया जाना चाहिए या एक लॉग फ़ाइल को सूचीबद्ध आउटपुट के समय का इरादा होना चाहिए।
बिल

2
यह आउटपुट में जगह की वजह से टाइमस्टैम्प के लिए आदर्श प्रारूप से कम है। उपयोग में इसे "$ टाइमस्टैम्प" उद्धृत करना सुनिश्चित करें या आपको कमांड में दो पारम मिलेंगे। उदा touch $timestampदो फ़ाइलों का उत्पादन करेगा।
harschware

8

bashबाहरी प्रोग्राम के लिए हाल के संस्करणों को कॉल की आवश्यकता नहीं है date:

printf -v timestamp '%(%T)T'

%(...)TUNIX टाइमस्टैम्प के रूप में संगत तर्क का उपयोग करता है, और इसे strftimeकोष्ठक के बीच -स्टाइल प्रारूप के अनुसार प्रारूपित करता है। -1वर्तमान समय से मेल खाती है, और जब कोई अस्पष्टता नहीं होती है तो उसे छोड़ा जा सकता है।


5

और मेरे साथी यूरोपीय लोगों के लिए, इसका उपयोग करने का प्रयास करें:

timestamp=$(date +%d-%m-%Y_%H-%M-%S)

प्रारूप का एक प्रारूप देगा: "15-02-2020_19-21-58"

आप वेरिएबल को कॉल करते हैं और इस तरह स्ट्रिंग का प्रतिनिधित्व प्राप्त करते हैं

$timestamp

1
कृपया अपने कोड के लिए कोड नोटेशन का उपयोग करने पर विचार करें।
साओ

4
timestamp=$(awk 'BEGIN {srand(); print srand()}')

एक मूल्य के बिना srand सबसे Awk कार्यान्वयन के साथ वर्तमान टाइमस्टैम्प का उपयोग करता है।


मुझे यह पसंद है, बहुत रचनात्मक!
तोबीवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.