Por que o comando unbuffer afeta o comando de tempo?

Por que o comando unbuffer afeta o comando de tempo?

Notei algo estranho ao usar o comando unbuffer com o comando time. Aqui eu só quero ver quanto tempo leva para encontrar um determinado arquivo no meu sistema:

time find . -name unixstuff

a saída é:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.011u 0.173s 0:00.38 47.3%     0+0k 0+0io 0pf+0w

mas quando escrevo unbuffer antes da saída deste comando ser:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.01user 0.17system 0:00.38elapsed 47%CPU (0avgtext+0avgdata 4656maxresident)k
0inputs+0outputs (0major+338minor)pagefaults 0swaps

Observe que 0,17s foi expandido para 0,17sistema e outras expansões de taquigrafia aconteceram. Gostaria de saber por que acontece essa mudança de comportamento. Não quero uma saída imprevisível em meus canos.

Responder1

É porque timeo primeiro comando é uma palavra-chave do shell. O timeno segundo comando é o executável. Veja a typesaída de time:

$ type -a time
time is a shell keyword
time is /usr/bin/time

O comando unbufferprecisa de um programa como argumento, não de uma palavra-chave do shell. Ele não pode interpretar uma palavra-chave shell, esta é uma bashpalavra-chave interna.

E a diferença na saída que você vê é a diferença entre essas duas implementações do timecomando. Basta usar o caminho abolute no primeiro comando que você terá o mesmo comportamento do segundo:

/usr/bin/time find . -name unixstuff

informação relacionada