Cada palavra 'time' nestes exemplos é uma palavra-chave ou '/ usr / bin / time'?

0

Nos exemplos a seguir, cada time é uma palavra-chave ou /usr/bin/time ? Por que, ou como você descobre isso?

uma palavra-chave pode ser um comando?

Ou a palavra-chave time se aplica a um comando vazio? (Eu poderia ter perguntado isso em algum lugar no post ou comentário, mas não consigo encontrá-lo)

Obrigado.

$ time time

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

$ time

real    0m0.000s
user    0m0.000s
sys 0m0.000s
    
por Tim 16.05.2018 / 05:36

3 respostas

4

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).

    
por 16.05.2018 / 06:11
1

Se você vir apenas uma saída no primeiro exemplo, isso é um bug do shell.

Em shells que reimplementam o conceito ksh , em que time é keyword , time sem argumentos imprime o tempo para todo o pipeline, que neste caso especial é apenas a única palavra-chave time .

Se você chamar time time , a primeira vez imprime o tempo para todo o pipeline e o segundo time imprime o tempo apenas para si.

Portanto, a palavra-chave time , de fato, é uma palavra-chave antes de um comando vazio.

    
por 16.05.2018 / 12:26
0

Pode ser ambos, dependendo da sua configuração.
Você pode ver o que está no seu sistema com este comando:

$ type time
time is a shell keyword

No seu exemplo, o tempo em time time apontará para o mesmo comando.

    
por 16.05.2018 / 05:44