Por que o formato da hora varia dependendo da forma como eu o chamo


14

Pode ser uma pergunta para iniciantes, mas não entendo como isso está configurado e por que o formato de timecomando de saída é diferente nesses dois casos:

se usado via time, a saída é de três linhas com informações básicas

$ time sleep 1

real    0m1.003s
user    0m0.000s
sys     0m0.000s

então eu posso verificar qual binário é usado

$ which time
/usr/bin/time

e ligue 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 a time

$ alias | grep time
$ 

Estou correndo Ubuntu 16.04.


É por isso que whiché basicamente inútil ...
Bakuriu

Respostas:


23

A primeira é a bashpalavra-chave interna do próprio time(compilada com bash), e a segunda é o executável externo time( /usr/bin/time, vem com o timepacote).

Além disso, whichnão é possível mostrar os comandos ou as palavras-chave integradas do shell, pois ele apenas pesquisa PATH, você precisa usá type-lo. Sendo um shell embutido, ele também typepode 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 usando apenas type(sem -a):

type time

O -adiz typepara procurar nas entidades internas do shell e também em PATHprocurar em todas as fontes possíveis.

Se, por algum motivo, você precisar do externo, use qualquer um dos seguintes:

\time
"time"
'time'
command time

ah, entendo, então whichnão considera builtins? E eu sempre deveria verificar type -aprimeiro. Na verdade, parece que typeé superior a which, porque permite localização /usr/bin/timebem
xaxa

@xaxa Sim, verifique minhas edições.
heemayl

obrigado por uma resposta detalhada! O que é whichútil para então?
Xaxa

1
@xaxa typeé realmente superior --- se você estiver usando o bash. Outra concha pode não ter a typebulitina ou a parte interna time.
jpaugh

2
@ jpaugh Não está certo. POSIX permite timeser apenas, mas não externa type, typeestá disponível em todos os shells compatíveis com POSIX.
heemayl

4

Outra diferença entre os utilitários embutidos e os externos é que o embutido do Bash time conclui o tempo de pipelines ou chamadas para funções shell (aparentemente até loops, mas o manual não parece prometer isso). O externo timenão pode, por estar fora do shell, não sabe sobre o código circundante.

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 é especificado no padrão, não é especificado como ele deve agir em um pipeline, portanto, uma implementação interna mais poderosa como essa é possível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.