किसी भी विकल्प के साथ `time` कमांड काम क्यों नहीं करता है?


60

मैंने समय के आउटपुट को प्रारूपित करने के लिए विकल्प के timeसाथ कमांड का उपयोग करने की कोशिश की -f, लेकिन मुझे निम्न त्रुटि मिली:

-f: command not found

तब मैं अन्य विकल्पों का उपयोग करने की कोशिश की -a, -o, आदि और मैं एक ही त्रुटि मिलती है। time --versionकाम भी नहीं करता ( --version: command not found)।

मुझे उस आदमी को पढ़ने के लिए मत कहो क्योंकि मैं पहले ही इसे कई बार कर चुका हूँ ... ये सभी विकल्प वहाँ निर्दिष्ट हैं। तो, समस्या कहां हो सकती है?


sudo apt-get install --reinstall timeमदद करता है?
जॉब

9
या हो सकता है आंतरिक खोल timeके साथ/usr/bin/time
Rmano

जवाबों:


90

ठीक है, भले ही आप इसे पसंद न करें, मैं आपको अधिक ध्यान के साथ फिर से पढ़ने के लिए डालूंगा man timeEXAMPLESअनुभाग के अंत में आप पाएंगे:

  Users of the bash shell need to use an explicit path in order to run
  the external time command and not the shell builtin variant.  On system
  where time is installed in /usr/bin, the first example would become
       /usr/bin/time wc /etc/hosts

इसलिए, मैं मान रहा हूं कि आप बैश शेल का उपयोग करते हैं time, जो शेल कीवर्ड के रूप में आंतरिक संस्करण का उपयोग करता है । आप निम्न कमांड का उपयोग करके इसे देख सकते हैं:

type time

और आउटपुट शायद होगा:

time is a shell keyword

यदि यह मामला है, तो स्पष्ट है, वास्तविक time कमांड का उपयोग करने के लिए, आपको इसके स्पष्ट पथ का उपयोग करना होगा /usr/bin/time:।

इसके अलावा, यदि आप शेल कीवर्ड का उपयोग नहीं करना चाहते हैं, तो आप अनुसरण के रूप में एक स्थायी उपनाम बनाtime सकते हैं :

alias time='/usr/bin/time'

यह शेल कीवर्ड को अधिलेखित करेगा timeक्योंकि कमांड:

type time

अब निम्नलिखित आउटपुट देगा:

time is aliased to `/usr/bin/time'

5
शेल निर्मित कमांड के लिए: {जानकारी समय} और {टाइप टाइम}। बाइनरी कमांड के लिए: {कौन सा समय} और {मैन टाइम}
माइकल मार्टिनेज

@ मिचेल info timeबाइनरी के बारे में है। help timeबिलिन के बारे में है।
वेजेंड्रिया

हाँ, माफ करना, मैं "मदद" सोच रहा था, लेकिन "जानकारी" बाहर आया
माइकल मार्टिनेज

21

चूंकि, अन्य उत्तर बताते हैं, timeएक शेल कीवर्ड है, आपके लिए एकमात्र विकल्प उपलब्ध है -p:

terdon@oregano ~ $ help time
time: time [-p] pipeline
    Report time consumed by pipeline's execution.

Execute PIPELINE and print a summary of the real time, user CPU time,
and system CPU time spent executing PIPELINE when it terminates.

Options:
  -p    print the timing summary in the portable Posix format

तो, आपको timeउस भाग को चलाने की आवश्यकता है /usr/bin। ऐसा करने के लिए यहां कुछ तरीके दिए गए हैं:

  • timeइसके बजाय निष्पादन योग्य का उपयोग करें :

    /usr/bin/time -f %Uuser ls >/dev/null
  • उपयोग करें \जो आपके शेल को उपनाम और कीवर्ड को अनदेखा करता है और इसके बजाय अपने $PATHमिलान योग्य निष्पादन को खोजता है:

    \time -f %Uuser ls >/dev/null 
  • commandबिलिन का उपयोग करें जिसका समान प्रभाव है:

    command time -f %Uuser ls >/dev/null
  • एक अलग शेल का उपयोग करें, जिसमें ऐसा कोई कीवर्ड नहीं है। उदाहरण के लिए sh(जो कि वास्तव dashमें उबंटू पर है):

    sh -c "time -f %Uuser ls >/dev/null"
  • उपयोग करें which, जो आपके माध्यम से खोजेगा $PATH(ठीक है, यह एक मूर्खतापूर्ण है):

    $(which time) -f %Uuser ls >/dev/null

क्या इसके विपरीत करने का एक तरीका है - timeनियमित रूप से अंतर्निहित प्रतिकृति /usr/bin/time? यानी डैश में डैश स्क्रिप्ट का अनुवाद करना।
डैन एम।

@DanM। मुझे समझ नहीं आ रहा है। यदि आप बिलिन चाहते हैं time, तो दौड़ें time। यदि आप स्टैंडअलोन निष्पादन योग्य चाहते हैं, तो चलाएं /usr/bin/time
terdon

timeजहां तक ​​मुझे पता है उबंटू के डिफ़ॉल्ट शेल पर कोई अंतर्निहित नहीं है । मैं उसी व्यवहार के साथ अंतर्निहित स्टैंडअलोन का उपयोग करके स्क्रिप्ट का अनुवाद करना चाहता हूं।
डैन एम।

@DanM। तो बस उपयोग करें time। जो भी उपलब्ध है, उसे कॉल करेगा। यह बैश के लिए बिलियन और डैश के लिए स्टैंडअलोन होगा। यदि आप उपयोग करते हैं /usr/bin/time, तो यह हमेशा स्टैंडअलोन को बुलाएगा, दोनों को बैश और डैश में। लेकिन ऐसा लगता है कि आपको एक नया सवाल पूछना चाहिए, जो आपके लिए आवश्यक व्यवहार की व्याख्या करता है। मुझे पता है अगर आप करते हैं और मैं कोशिश करूँगा और मदद करूँगा।
terdon

हाँ, लेकिन अंतर्निहित और स्टैंडअलोन में काफी अलग वाक्यविन्यास / शब्दार्थ है। कोई बात नहीं धन्यवाद। मैं एक नया सवाल पूछूंगा अगर मैं यह नहीं पता लगाऊंगा कि इसके साथ कैसे निपटना है।
डैन एम।

17

bashऔर zshगोले अपनी आंतरिक है timeआदेश। आपको उपयोग करना होगा

/usr/bin/time -f ...

BTW, मुझे पता चला कि उपयोग (से zsh):

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