Почему команда unbuffer влияет на команду time?

Почему команда unbuffer влияет на команду time?

Я заметил что-то странное при использовании команды unbuffer с командой time. Здесь я просто хочу посмотреть, сколько времени займет поиск определенного файла в моей системе:

time find . -name unixstuff

выход:

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

но когда я пишу unbuffer перед этой командой, вывод такой:

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

Обратите внимание, что 0.17s расширен до 0.17system и произошли другие расширения сокращений. Я хотел бы знать, почему происходит это изменение поведения. Я не хочу непредсказуемого вывода в моих каналах.

решение1

Это потому, что timeв первой команде — ключевое слово оболочки. timeВо второй команде — исполняемый файл. Смотрите typeвывод time:

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

Команда unbufferнуждается в программе в качестве аргумента, а не в ключевом слове оболочки. Она не может интерпретировать ключевое слово оболочки, это bashвнутреннее ключевое слово.

И разница в выводе, которую вы видите, является разницей этих двух реализаций команды time. Просто используйте путь abolute в первой команде, и у вас будет такое же поведение, как и во второй:

/usr/bin/time find . -name unixstuff

Связанный контент