Perché il comando "tempo" non funziona con nessuna opzione?

55

Ho provato a utilizzare il comando time con l'opzione -f per formattare l'output del tempo, ma ottengo il seguente errore:

-f: command not found

Poi ho provato ad usare altre opzioni -a , -o , ecc. e ottengo lo stesso errore. Neanche time --version non funziona ( --version: command not found ).

Non dirmi di leggere l'uomo perché lo faccio già molte volte ... Tutte queste opzioni sono specificate lì. Quindi, dove potrebbe essere il problema?

    
posta user258266 14.03.2014 - 18:50

3 risposte

79

Bene, anche se non ti piace, ti metterò di nuovo a leggere con più attenzione man time . Alla fine della sezione EXAMPLES troverai:

  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

Quindi, presumo che tu usi la shell bash che usa una versione interna di shell incorporata di time . Puoi verificarlo usando il seguente comando:

type time

e l'output sarà probabilmente:

time is a shell keyword

Se questo è il caso, allora è chiaro, per usare il comando il vero time , devi usare il suo percorso esplicito: /usr/bin/time .

Inoltre, se non vuoi più utilizzare la shell incorporata time , puoi creare un alias permanente come segue:

alias time='/usr/bin/time'

Questo sovrascriverà la shell incorporata time perché il comando:

type time

darà il seguente output ora:

time is aliased to '/usr/bin/time'
    
risposta data Radu Rădeanu 14.03.2014 - 18:56
20

Poiché, come spiegano le altre risposte, time è una parola chiave shell, l'unica opzione disponibile è -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

Pertanto, devi eseguire time in /usr/bin . Ecco alcuni modi per farlo:

  • Utilizza invece l'eseguibile time :

    /usr/bin/time -f %Uuser ls >/dev/null
    
  • Usa \ che fa sì che la tua shell ignori alias, builtin e parole chiave e cerchi la tua $PATH per un eseguibile corrispondente:

    \time -f %Uuser ls >/dev/null 
    
  • Utilizza il built-in command che fa lo stesso di sopra

    command time -f %Uuser ls >/dev/null
    
  • Usa una shell diversa, una che non ha una parola chiave del genere. Ad esempio sh (che in realtà è dash su Ubuntu

    sh -c "time -f %Uuser ls >/dev/null"
    
  • Usa which , che cercherà attraverso $PATH (OK, questo è sciocco)

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

Le shell bash e zsh hanno il loro comando interno time . Devi usare

/usr/bin/time -f ...

A proposito, ho scoperto che usando (da zsh ):

~% which  time
time: shell reserved word
    
risposta data Rmano 14.03.2014 - 18:54

Leggi altre domande sui tag