Почему выходной формат времени варьируется в зависимости от того, как я называю его

Это может быть вопрос новичка, но я не понимаю, как это настроено и почему выходной формат 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.

14
задан 2 February 2017 в 01:13

2 ответа

Первый - 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
23
ответ дан 23 November 2019 в 02:56

Другое различие между встроенными и внешними утилитами, что 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
...

, В то время как время , указал в стандарте, он оставил неуказанным, как он должен действовать в конвейере, таким образом, более мощная внутренняя реализация как это возможна.

4
ответ дан 23 November 2019 в 02:56

Другие вопросы по тегам:

Похожие вопросы: