Neden 'zaman' komutu herhangi bir seçenek ile çalışmıyor?

55

Zamanın çıktısını biçimlendirmek için time komutunu kullanarak -f komutunu kullanmaya çalıştım, ancak şu hatayı alıyorum:

-f: command not found

Sonra diğer seçenekleri -a , -o vb. kullanmayı denedim ve aynı hatayı alıyorum. % Co_de% bile çalışmıyor ( time --version ).

Adamı okumamı söyleme, çünkü zaten bunu birçok kez yaptım ... Bütün bu seçenekler orada belirtildi. Peki sorun nerede olabilir?

    
sordu user258266 14.03.2014 18:50

3 cevap

79

Peki, beğenmezseniz bile, sizi daha fazla dikkatle man time ile tekrar okuyacağım. % Co_de% bölümünün sonunda bulabilirsiniz:

  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

Öyleyse, EXAMPLES 'lık bir dahili, kabuk yerleşik sürümü kullanan bash kabuğunu kullandığınızı varsayalım. Bunu aşağıdaki komutu kullanarak kontrol edebilirsiniz:

type time

ve çıktı muhtemelen:

time is a shell keyword

Durum buysa, gerçek time komutunu kullanmak için anlaşılır, açık yolunu kullanmanız gerekir: time .

Ayrıca, artık% co_de öğesinde yerleşik kabuk kullanmak istemiyorsanız kalıcı bir takma ad oluşturabilirsiniz takip eden:

alias time='/usr/bin/time'

Bu komut, komutun /usr/bin/time öğesinin üzerine yazılacağı için komutun üzerine yazacaktır:

type time

şu anda aşağıdaki çıktıyı verecektir:

time is aliased to '/usr/bin/time'
    
verilen cevap Radu Rădeanu 14.03.2014 18:56
20

Diğer yanıtların açıkladığı gibi, time bir kabuk anahtar kelimesidir. Kullanabileceğiniz tek seçenek -p :

[email protected] ~ $ 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

Yani, time dizinindeki /usr/bin dosyasını çalıştırmanız gerekiyor. İşte yapmanın birkaç yolu:

  • Bunun yerine time yürütülebilir dosyasını kullanın:

    /usr/bin/time -f %Uuser ls >/dev/null
    
  • Kabuğunuzun takma adları, yerleşikleri ve anahtar kelimeleri yoksaymasına neden olan \ değerini kullanın ve bunun yerine, eşleşen bir yürütülebilir dosya için $PATH 'nizi arayın:

    \time -f %Uuser ls >/dev/null 
    
  • Yukarıdakiyle aynı olan command yerleşimini kullanın

    command time -f %Uuser ls >/dev/null
    
  • Böyle bir anahtar kelimeye sahip olmayan farklı bir kabuk kullanın. Örneğin, sh (aslında Ubuntu'da dash

    )
    sh -c "time -f %Uuser ls >/dev/null"
    
  • which öğesinde arama yapacak $PATH kullanın (Tamam, bu aptalca)

    $(which time) -f %Uuser ls >/dev/null
    
verilen cevap terdon 14.03.2014 19:10
16

bash ve zsh kabuklarının dahili time komutu var. Kullanmalısın

/usr/bin/time -f ...

BTW, kullanarak ( zsh 'den) keşfettim:

~% which  time
time: shell reserved word
    
verilen cevap Rmano 14.03.2014 18:54

Etiketlerdeki diğer soruları oku