2009-11-01 1 views
63

का निष्पादन समय प्रिंट करें निम्नलिखित संयोजन के साथ शेल कमांड के निष्पादन समय को मुद्रित करना संभव है?शेल कमांड

[email protected]:~# "command to execute" && echo "execution time" 

उत्तर

53

मत भूलना वहाँ के बीच एक अंतर है कि पार्टी के builtin time (जो डिफ़ॉल्ट रूप से बुलाया जाना चाहिए जब आप time command करें) और /usr/bin/time (जो आपको इसे अपने पूर्ण पथ से कॉल करने की आवश्यकता होनी चाहिए)।

बिल्टिन time हमेशा stderr पर प्रिंट करता है, लेकिन /usr/bin/time आपको एक विशिष्ट फ़ाइल में समय का आउटपुट भेजने की अनुमति देगा, इसलिए आप निष्पादित कमांड की stderr स्ट्रीम में हस्तक्षेप नहीं करते हैं। इसके अलावा, /usr/bin/time के प्रारूप जबकि पार्टी के builtin time प्रारूप केवलTIMEFORMAT वातावरण चर द्वारा विन्यस्त है, कमांड लाइन या वातावरण चर TIME द्वारा पर विन्यास योग्य है।

$ time factor 1234567889234567891 # builtin 
1234567889234567891: 142662263 8653780357 

real 0m3.194s 
user 0m1.596s 
sys 0m0.004s 
$ /usr/bin/time factor 1234567889234567891 
1234567889234567891: 142662263 8653780357 
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+215minor)pagefaults 0swaps 
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed` 
1234567889234567891: 142662263 8653780357 
$ cat timed 
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k 
0inputs+0outputs (0major+217minor)pagefaults 0swaps 
+0

'मैन बाश' से: "TIMEFORMAT चर को एक प्रारूप स्ट्रिंग पर सेट किया जा सकता है जो निर्दिष्ट करता है कि समय की जानकारी कैसे प्रदर्शित की जानी चाहिए" –

+0

ओह - I * सोचा * इसे प्रारूपित करने का कोई तरीका था, लेकिन मुझे इसे 'सहायता समय' में याद आया क्योंकि मैंने केवल उस पर ध्यान दिया और मैंने सोचा कि यह एक कमांड लाइन तर्क था। मैं जवाब अपडेट करूंगा। –

+0

-1 यह सवाल का जवाब देने के लिए प्रतीत नहीं होता है। –

21
[email protected]:~# time [command] 

यह भी इस्तेमाल किया इस्तेमाल किया वास्तविक समय और सिस्टम समय के बीच अलग करता है।

+0

निश्चित रूप से बुनियादी जवाब है कि - लेकिन अगर आप आदेश से त्रुटि उत्पादन को देखने के लिए और अभी तक मानक आउटपुट में समय जानकारी भेजने के रूप में सवाल करता है चाहते हैं कुछ जटिलताओं देखते हैं। टाइम कमांड stderr लिखता है। आप जो सुझाव देते हैं वह शायद सटीक है - इसलिए मेरा +1। –

+2

'time' tty को लिखता है, stderr नहीं। जो मुझे लगता है चीजें बदतर बना देता है। – mob

90

time अधिकांश गोले में अंतर्निहित कमांड है जो टीटी को निष्पादन समय की जानकारी लिखता है।

तुम भी

start_time=`date +%s` 
<command-to-execute> 
end_time=`date +%s` 
echo execution time was `expr $end_time - $start_time` s. 

की तरह या bash में कुछ की कोशिश कर सकते:

start_time=`date +%s` 
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s 
+6

स्वीकार्य उत्तर – maazza

+0

से उत्कृष्ट, अधिक लचीला माजा से सहमत है, इस लचीलेपन ने मुझे आदेशों के पूरे सेट के समय को मापने की अनुमति दी। – Nath

+0

निष्पादन –

2

zsh में आप पार्टी में

=time ... 

का उपयोग करें या ZSH आप

command time ... 

ये (अलग तंत्र द्वारा) का उपयोग कर सकते एक बाहरी कमांड इस्तेमाल किया जा करने के लिए मजबूर कर सकते हैं।

6

@ भीड़ के जवाब देने के लिए जोड़ा जा रहा है:

%Ndate +%s को जोड़ हमें सटीकता nanosecond देता है:

start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start` 
4

मैं एक प्रतिलिपि या हैश की तरह एक लंबी चलने वाली प्रक्रिया शुरू कर रहा हूँ और मैं जानना चाहते हैं इसे बाद में कितनी देर तक ले लिया है, मैं तो बस ऐसा करते हैं:

$ date; sha1sum reallybigfile.txt; date 

निम्नलिखित में से कौन उत्पादन में परिणाम होगा:

Tue Jun 2 21:16:03 PDT 2015 
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt 
Tue Jun 2 21:33:54 PDT 2015 

अनुमोदित, जैसा कि यहां कार्यान्वित किया गया है, यह बहुत सटीक नहीं है और समय बीतने की गणना नहीं करता है। लेकिन यह गंदगी सरल है और कभी-कभी आपको चाहिए।

6

लाइन-दर-लाइन डेल्टा माप के लिए, gnonom आज़माएं।

यह एक कमांड लाइन उपयोगिता है, थोड़ी अधिक पसंद है, टाइमस्टैम्प जानकारी को किसी अन्य कमांड के मानक आउटपुट में प्रीपेड करने के लिए।लंबे समय तक चलने वाली प्रक्रियाओं के लिए उपयोगी जहां आप इतने लंबे समय से क्या ले रहे हैं के ऐतिहासिक रिकॉर्ड चाहते हैं।

gnomon को कुछ भी पिपिंग करना प्रत्येक पंक्ति में एक टाइमस्टैम्प तैयार करेगा, यह दर्शाता है कि बफर में आखिरी पंक्ति कितनी लंबी थी - यानी, अगली पंक्ति को प्रदर्शित होने में कितना समय लगेगा। डिफ़ॉल्ट रूप से, gnomon प्रत्येक पंक्ति के बीच समाप्त सेकंड प्रदर्शित करेगा, लेकिन यह विन्यास योग्य है।

gnomon demo