2009-06-12 6 views
6

में एक चर में मानक त्रुटि को कैप्चर करना मैं एक चर में टाइम कमांड (जो मानक त्रुटि को लिखता है) के आउटपुट को कैप्चर करना चाहता हूं। मैं जानता हूँ कि यह इस तरह से किया जा सकता है कि:बैश

 
    $ var=`time (mycommand &> /dev/null) 2>&1` 
    $ echo "$var" 
    real 0m0.003s 
    user 0m0.001s 
    sys  0m0.002s 
अंतरतम रीडायरेक्ट के साथ

/dev/बातिल को mycommand से बाहर मानक और मानक भेजने में त्रुटि के रूप में यह आवश्यक नहीं है, और सबसे बाहरी रीडायरेक्ट तो मानक के लिए मानक त्रुटि भेजने बाहर कि यह चर में संग्रहीत किया जा सकता है।

मेरी समस्या यह थी कि मैं इसे एक शेल स्क्रिप्ट के अंदर काम नहीं कर सका, लेकिन यह पता चला कि यह कहीं और बग की वजह से था। तो अब जब मैं आगे बढ़ गया हूं और इस सवाल को लिखा है, तो मैं पूछने जा रहा हूं, क्या यह हासिल करने का यह सबसे अच्छा तरीका है या आप इसे अलग-अलग करेंगे?

उत्तर

8

केवल परिवर्तन मैं होगा है:

var=$(time (mycommand &> /dev/null) 2>&1) 

$() आदेश वाक्य रचना यदि आप शेल यह दो कारणों के लिए बेहतर है का समर्थन करता है:

  • बैकस्लैश से बचने के लिए कोई ज़रूरत नहीं,
  • आप बैकटिक्स से बचने के बिना आदेश घोंसला कर सकते हैं। मतभेद की

विवरण: Bash Command Substition

+1

'पर $ (...) पसंद करते हैं के लिए +1 ...' –

1

यदि आपको वास्तव में प्रोग्राम के समय से stdout या stderr की आवश्यकता नहीं है, तो यह करने का यह एक अच्छा तरीका है और किसी भी अन्य विधि के रूप में कुशल होना चाहिए।