बाहरी कमांड के बजाय बैश में अंतर्निहित "टाइम" कमांड का उपयोग करना


12

timeकमांड के साथ काम करते हुए , मैं एक ऐसी स्थिति में आया, जहां मुझे timeबाहरी GNU टाइम कमांड के बजाय बिल्ट-इन का उपयोग करना चाहिए /usr/bin/time। तो, मैं यह कैसे कर सकता हूं? मैंने कहीं देखा कि उपयोग करने enableऔर / या commandमदद करेगा, लेकिन उन्होंने ऐसा नहीं किया।

यह एक उपयोग मामला है:

watch "time ls"

जो बाहरी /usr/bin/timeकमांड का उपयोग करता है , जो मुझे नहीं चाहिए! यह तब होता है जब timeमैं time lsटर्मिनल पर चलने वाले आंतरिक बैश फ़ंक्शन को इस तरह से आमंत्रित करता हूं :

$ time ls

कृपया ध्यान दें कि सटीक विपरीत अनुरोध यहां दिया गया है:

दो आज्ञाओं के साथ बहुत अंतर है। आंतरिक timeअधिक सटीक है (जो मैं चाहता हूं), लेकिन बाहरी कमांड में अधिक विकल्प हैं (जिनकी मुझे आवश्यकता नहीं है)।


watch 'bash -c "builtin time ls"'शायद?
ग्लेन जैकमैन

1
यहां देखें कि कैसे बिल्डरों का उपयोग करने के लिए बैश को मजबूर किया जाए, पेट्र यूज़ल द्वारा उत्तर 2 देखें: builtin timeचाल करना चाहिए।
फिक्सेमन

2
@ फ़िक्समैन, timeएक बिलिन नहीं है bash, यह भाषा का एक आरक्षित शब्द है, ताकि आप समय-समय पर पाइपलाइन (जैसे time foo | bar) या मिश्रित कमांड (जैसे time for i in...;done)
स्टीफन चेज़लस

जवाबों:


13

डिफ़ॉल्ट रूप से, watchअपनी कमांड चलाता है /bin/sh -c '...'ताकि आप देख सकें /bin/shकि timeकमांड की व्याख्या कैसे होती है । आपके /bin/shजाहिरा तौर पर एक बिलिन नहीं है time

एक अलग शेल के साथ कमांड को चलाने के लिए, -xडिफ़ॉल्ट से छुटकारा पाने के लिए विकल्प का उपयोग करें , फिर शेल के अपने स्वयं के स्पष्ट आहरण को जोड़ें, जिसका अंतर्निहित आप चाहते हैं।

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

कोई फर्क नहीं पड़ता कि आप कैसे चलाते हैं watch, जिस कमांड को आप देख रहे हैं वह शेल का एक बच्चा नहीं है जो watchकमांड को चलाता है , ताकि शेल की सेटिंग सीधे प्रासंगिक न हों।

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