Я заметил что-то странное при использовании команды 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