Em time time
, ambos são os internos do bash, nenhum é o comando /usr/bin/time
externo.
Isso é possível porque o time
embutido usa um pipeline como argumento, mas time
é um pipeline, portanto, várias chamadas são possíveis.
Se você olhar o código-fonte do bash, você encontrará até mesmo comentários referentes a este caso especial , procurando por uma chamada para time
após outro time
ou time -p
.
Você só vê a saída uma vez porque time
é implementado por definindo um flag de bit , então chamá-lo mais de uma vez não tem efeito, já que é apenas definir o mesmo bit no pipeline ...
Isso, no entanto, chama isso em dois pipelines separados, então você vê a saída duas vezes:
$ time { time; }
real 0m0.000s
user 0m0.000s
sys 0m0.000s
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Você pode ver os resultados usando o /usr/bin/time
externo chamando-o explicitamente com o caminho ... Ou usando \time
(o principal \
impede que o shell use um built-in) ou usando o command
built-in (como em time command time
), por exemplo:
$ time command time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
real 0m0.002s
user 0m0.000s
sys 0m0.000s
Como você pode ver, o /usr/bin/time
externo reclama quando é chamado sem argumentos ... Então é isso que você está vendo lá. (Além disso, se você usá-lo em um comando real, você notará que o formato de saída é diferente daquele do built-in bash).