
Pode ser uma pergunta de novato, mas não entendo como isso está configurado e por que o formato de saída do time
comando é diferente nestes dois casos:
se usado via time
, a saída será de três linhas com informações básicas
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
então posso verificar qual binário é usado
$ which time
/usr/bin/time
e chame-o diretamente para obter a saída em um formato completamente diferente, com muito mais informações
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
não há aliases relacionados atime
$ alias | grep time
$
Estou correndo Ubuntu 16.04
.
Responder1
A primeira é a bash
palavra-chave interna do próprio time
(compilada com bash
), e a segunda é o executável externo time
( /usr/bin/time
, vem com o time
pacote).
Além disso, which
não é possível mostrar os comandos ou palavras-chave internos do shell, pois ele apenas pesquisa PATH
, você precisa usar type
para isso. Sendo um shell embutido, você type
também pode verificar as entidades internas do shell (e também PATH
), para que você possa identificar a diferença:
type -a time
Aqui:
$ type -a time
time is a shell keyword
time is /usr/bin/time
O primeiro será executado se você apenas usar time
. Você também pode obter o que está sendo executado apenas usando type
(sem -a
):
type time
Diz para pesquisar nas entidades internas do shell e também, ou -a
seja , pesquisar em todas as fontes possíveis.type
PATH
Se por algum motivo você precisar do externo, use qualquer um dos seguintes:
\time
"time"
'time'
command time
Responder2
Outra diferença entre os utilitários internos e externos é que os utilitários internos do Bashtime
cronometrará pipelines completosou chamadas para funções shell (aparentemente até loops, mas o manual não parece prometer isso). O externo time
não pode, por estar fora do shell, não conhecer o código ao redor.
bash$ time echo blah | sleep 3
real 0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real 0m3.006s
...
Enquanto o tempo éEspecificadasno padrão, não é especificado como deve agir em um pipeline, portanto, uma implementação interna mais poderosa como essa é possível.