На этот вопрос уже есть ответ:
У меня есть две одинаковые команды, которые я использовал, но у них разные параметры:
time -f "% E% C" mycommandtomeasure
/ usr / bin / time -f "% E% C "mycommandtomeasure
Первая не выполняется, а вторая выполняется. Первый не может найти параметр -f
. Проверяя whereis time
, я получаю путь / usr / bin / time
, поэтому я понимаю, что time
- это та же команда, что и / usr / bin / time
.
Видимо, мое предположение неверно. Может ли кто-нибудь помочь мне уточнить?
Давайте взглянем на какой time
на самом деле использует type
команда (см. help type
):
$ type -a time
time is a shell keyword
time is /usr/bin/time
Так, по-видимому, time
в нашей системе оба
/usr/bin/time
Поскольку ключевые слова оболочки имеют приоритет по исполняемым файлам, что Вы на самом деле выполняете при вводе только time
ключевое слово оболочки. Вы также видите это от порядка в который type -a
перечисляет их, или от вывода просто type time
, который только перечисляет один эффективный тип.
Теперь, давайте проверим то, что может сделать каждый из тех:
Исполняемые файлы обычно имеют страницу справочника (страница руководства), которая мы можем открыть и прочитать использование man
команда, т.е. здесь man time
.
Получить справку о материале встроило в Bash, необходимо использовать help
команда: help time
Вы отметите, что ключевое слово оболочки поддерживает меньше опций, чем исполняемый файл, но это имеет другие преимущества, как Вы можете, например, конструкции Bash комплекса времени как конвейеры с ним. Посмотрите конец этого ответа для примера.
Если необходимо использовать исполняемый файл вместо ключевого слова оболочки, хотя, можно или ввести полный путь, т.е. /usr/bin/time
, или можно снабдить префиксом команду обратную косую черту, чтобы мешать Bash оценить его: \time
Между прочим, в то время как time
ключевое слово оболочки в Bash, это не существует в sh
(Тире), где Вы только получили бы исполняемый файл.
Когда Вы работаете time
Вы выполняете встроенный в команду оболочки, которая не поддерживает все функции.
Когда Вы работаете /usr/bin/time
, Вы выполняете реальный GNU time
программа.
Можно установить псевдоним для выполнения всегда "реального".