बैश time
कमांड-लाइन्स को पार्स करते समय एक विशेष मामले के रूप में बिल्ट-इन का इलाज करता है ।
जैसा कि बैश मैनपेज में पढ़ा जा सकता है, टाइप की गई लाइन पहले एक सूची में विभाजित है:
pipeline ; pipeline
जहां एक पाइपलाइन है:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
या हमारे मामले में, बस:
time command
यानी अगर समय मौजूद है, तो कमांड भी मौजूद होना चाहिए ।
[एक विशेष मामला है जो time
एक नई पंक्ति का पालन करने की अनुमति देता है, लेकिन यह यहां लागू नहीं होता है]
तो, हमारे मामले में, हमारे पास:
time;date
दो पाइपलाइनों में विभाजित किया जा रहा है:
1. time
2. date
और पाइपलाइन 1 अच्छी तरह से नहीं बनी है, क्योंकि हमारे पास time
बिना कमांड के है। इसलिए त्रुटि।
ध्यान दें कि कमांड-लाइन time
यहां काम नहीं करती है:
$ /usr/bin/time;date
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
बैश इसे 2 पाइपलाइनों में अपेक्षित रूप से पार करता है:
1. /usr/bin/time
2. date
और /usr/bin/time
फिर बिना किसी तर्क के साथ चलने से इंकार कर दिया। ध्यान दें कि यह /usr/bin/time
बैश से त्रुटि नहीं है।
बैक-टिक का काम करने का कारण यह है कि बैक-टिक स्टॉप time
पाइपलाइन के भीतर एक विशेष तत्व के रूप में व्याख्या किया जा रहा है।
यानी पीछे-टिक के साथ:
`time`;date
इसे दो पाइपलाइनों के रूप में रखा गया है:
1. `time`
2. date
याद रखें कि एक पाइपलाइन, हमारे मामले में है:
[time] command
और शुरू में समस्या यह थी कि हमारे पास time
कोई आदेश नहीं था, जिसकी अनुमति नहीं है। लेकिन अब हमारे पास केवल कमांड है:
`time`
पूर्ववर्ती के बिना time
, चूंकि बैक-टिक्स का अर्थ है कि time
कमांड के रूप में व्याख्या की जाती है, पूर्ववर्ती शब्द के रूप में नहीं।
तो बैश तो time
बिना किसी आर्ग के साथ अपने बिलिन को चलाता है , जिसे स्वीकार किया जाता है। यह कोई आउटपुट नहीं पैदा करता है, और हम कोई त्रुटि नहीं देखते हैं।
ध्यान दें कि:
`time`
वास्तव में बिल्ट-इन का परिणाम चलता time
है, यानी जो कुछ भी time
निर्मित होता है वह स्टडआउट पर चलता है । लेकिन जब time
से अपने दम पर कुछ भी लिखने के लिए नहीं है, यह काम करने के लिए प्रकट होता है।
अंत में, यह नोट किया गया है कि यह काम करता है:
time ; ; date
जो मैं समझा नहीं सकता, दुख की बात है :)
time;date
बनाम पर हैdate;time
। ऐसा लगता है कि आउटपुट के साथ पाइपलाइन मेंbash
और अंतिम चार के साथ एक समस्या हैtime
। अलग-अलग टर्मिनल एमुलेटर में परीक्षण किए गए परिणाम हैं: - [बैश] $ तारीख; समय # [ठीक] $ समय; तारीख # [ नोटोक ] बैश: अप्रत्याशित टोकन के पास सिंटैक्स त्रुटि `तिथि '$ समय # केवल त्रुटि दिखाई नहीं देती है कि यह है किसी भी तारीख का परिणाम। - [Csh] $ date; समय # [OK] $ समय; तारीख # [OK] - [Tcsh] $ तारीख; समय # [OK] $ समय; तारीख # [OK] - [Ksh] $ date; समय # [ ठीक है] $ समय; तिथि # [ठीक]