Это может быть вопрос новичка, но я не понимаю, как это настроено и почему формат вывода time
команды отличается в этих двух случаях:
если используется с помощью time
, вывод три строки с базовой информацией
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
тогда я могу проверить, какой двоичный файл используется
$ which time
/usr/bin/time
и вызвать его напрямую, чтобы получить вывод в совершенно другом формате, с гораздо большей информацией
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
нет псевдонимов, связанных с time
$ alias | grep time
$
Я бегу Ubuntu 16.04
.
which
в основном бесполезно ...Ответы:
Первое - это
bash
собственное встроенное ключевое словоtime
(скомпилировано сbash
), а второе - внешний исполняемый файлtime
(/usr/bin/time
, поставляется сtime
пакетом).Кроме того,
which
невозможно отобразить встроенные команды оболочки или ключевые слова, поскольку она просто просматриваетPATH
, вам нужно использоватьtype
это. Будучи встроенной в оболочку, онаtype
может дополнительно проверять внутренние сущности оболочки (а такжеPATH
), поэтому вы можете определить разницу следующим образом:Вот:
Первый будет выполнен, если вы просто используете
time
. Вы также можете получить то, что выполняется, просто используяtype
(без-a
):-a
Говоритtype
искать во внутренних сущностях интерпретатора , а также вPATH
то поиск во всех возможных источниках.Если по какой-то причине вам нужен внешний, используйте любой из:
источник
which
не учитывает встроенные функции? И я всегда должен проверитьtype -a
сначала. На самом деле, это , кажется ,type
превосходит ,which
потому что он выводит расположение ,/usr/bin/time
а такжеwhich
для этого полезно?type
действительно лучше - если вы используете bash. В другой оболочке может не быть ниtype
булитина, ниtime
встроенного.time
быть только внешним, но не доступенtype
,type
доступен во всех POSIX-совместимых оболочках.Другое различие между встроенными и внешними утилитами состоит в том, что встроенная утилита Bash будет рассчитывать
time
время завершения конвейеров или вызовов функций оболочки (по-видимому, даже циклы, но руководство, похоже, не обещает этого). Внешнееtime
не может, так как находясь вне оболочки, не знает об окружающем коде.Хотя время указано в стандарте, оно не определено, как оно должно действовать в конвейере, поэтому возможна более мощная внутренняя реализация, подобная этой.
источник