Por que o comando 'time' não funciona com nenhuma opção?

53

Eu tentei usar o comando time com a opção -f para formatar a saída de tempo, mas recebo o seguinte erro:

-f: command not found

Então eu tentei usar outras opções -a , -o , etc e recebo o mesmo erro. Nem mesmo time --version não funciona ( --version: command not found ).

Não me diga para ler o homem porque eu já o faço muitas vezes ... Todas essas opções estão especificadas lá. Então, onde poderia estar o problema?

    
por user258266 14.03.2014 / 18:50

3 respostas

76

Bem, mesmo que você não goste, colocarei você para ler novamente com mais atenção man time . No final da seção EXAMPLES , você encontrará:

  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

Portanto, suponho que você use o bash shell, que usa uma versão interna do shell, com a versão time . Você pode verificar isso usando o seguinte comando:

type time

e a saída provavelmente será:

time is a shell keyword

Se este for o caso, então, é claro, para usar o comando real time , você deve usar seu caminho explícito: /usr/bin/time .

Além disso, se você não quiser mais usar o shell embutido time , você pode criar um alias permanente como segue:

alias time='/usr/bin/time'

Isto irá sobrescrever o shell embutido time porque o comando:

type time

fornecerá a seguinte saída agora:

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

Como, como as outras respostas explicam, time é uma palavra-chave do shell, a única opção disponível é -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

Então, você precisa executar o time que está em /usr/bin . Aqui estão algumas maneiras de fazer isso:

  • Use o executável time :

    /usr/bin/time -f %Uuser ls >/dev/null
    
  • Use \ , o que faz com que seu shell ignore aliases, códigos incorporados e palavras-chave e, em vez disso, pesquise seu $PATH em um executável correspondente:

    \time -f %Uuser ls >/dev/null 
    
  • Use o command incorporado que faz o mesmo que o acima

    command time -f %Uuser ls >/dev/null
    
  • Use um shell diferente, um que não tenha essa palavra-chave. Por exemplo, sh (que na verdade é dash no Ubuntu

    sh -c "time -f %Uuser ls >/dev/null"
    
  • Use which , que pesquisará seu $PATH (OK, esse é um bobo)

    $(which time) -f %Uuser ls >/dev/null
    
por terdon 14.03.2014 / 19:10
15

As conchas bash e zsh têm seu comando time interno. Você tem que usar

/usr/bin/time -f ...

BTW, descobri que usando (de zsh ):

~% which  time
time: shell reserved word
    
por Rmano 14.03.2014 / 18:54