Это может быть вопрос новичка, но я не понимаю, как это настроено и почему выходной формат 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
.
Первый - bash
владейте встроенным ключевым словом time
(скомпилированный с bash
), и второй является внешним исполняемым файлом time
(/usr/bin/time
, идет time
пакет).
Кроме того, which
не может показать встроенные команды или ключевые слова оболочки, поскольку это просто перерывает PATH
, необходимо использовать type
для этого. Будучи оболочкой, встроенной самой, type
может дополнительно проверить на внутренние объекты оболочки (и также PATH
), таким образом, можно определить различие:
type -a time
Здесь:
$ type -a time
time is a shell keyword
time is /usr/bin/time
Первый будет выполняться, если Вы просто будете использовать time
. Можно также добраться, который выполняется, просто используя type
(без -a
):
type time
-a
говорит type
искать во внутренних объектах оболочки и также в PATH
т.е. поиск во всех возможных источниках.
По некоторым причинам при необходимости во внешнем используйте любой из:
\time
"time"
'time'
command time
Другое различие между встроенными и внешними утилитами, что Bash, встроенный time
, будет время завершать конвейеры или звонит для окружения функций (по-видимому даже циклы, но руководство, кажется, не обещает это). Внешнее time
не может, начиная с того, чтобы быть вне оболочки, не знать об окружающем коде.
bash$ time echo blah | sleep 3
real 0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real 0m3.006s
...
, В то время как время , указал в стандарте, он оставил неуказанным, как он должен действовать в конвейере, таким образом, более мощная внутренняя реализация как это возможна.