Pode ser uma pergunta para iniciantes, mas não entendo como isso está configurado e por que o formato de time
comando 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
.
which
é basicamente inútil ...Respostas:
A primeira é a
bash
palavra-chave interna do própriotime
(compilada combash
), e a segunda é o executável externotime
(/usr/bin/time
, vem com otime
pacote).Além disso,
which
não é possível mostrar os comandos ou as palavras-chave integradas do shell, pois ele apenas pesquisaPATH
, você precisa usátype
-lo. Sendo um shell embutido, ele tambémtype
pode verificar as entidades internas do shell (e tambémPATH
), para que você possa identificar a diferença:Aqui:
O primeiro será executado se você apenas usar
time
. Você também pode obter o que está sendo executado usando apenastype
(sem-a
):O
-a
diztype
para procurar nas entidades internas do shell e também emPATH
procurar em todas as fontes possíveis.Se, por algum motivo, você precisar do externo, use qualquer um dos seguintes:
fonte
which
não considera builtins? E eu sempre deveria verificartype -a
primeiro. Na verdade, parece quetype
é superior awhich
, porque permite localização/usr/bin/time
bemwhich
útil para então?type
é realmente superior --- se você estiver usando o bash. Outra concha pode não ter atype
bulitina ou a parte internatime
.time
ser apenas, mas não externatype
,type
está disponível em todos os shells compatíveis com POSIX.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 externotime
não pode, por estar fora do shell, não sabe sobre o código circundante.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.
fonte