Чому вихідний формат часу змінюється залежно від того, як я його називаю


14

Це може бути питання новачка, але я не розумію, як це налаштовано і чому вихідний формат 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в принципі марно ...
Бакуріу

Відповіді:


23

Перший - це 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

ах, бачу, так whichне вважає вбудованими? І я завжди повинен перевірити type -aспочатку. На насправді, це , здається , typeперевершує , whichтому що він виводить розташування , /usr/bin/timeа також
XAXA

@xaxa Так, перевірити мої зміни.
heemayl

дякую за детальну відповідь! Що whichтоді корисне?
xaxa

1
@xaxa typeсправді перевершує --- якщо ви використовуєте bash. Інша оболонка може не мати ні typeбулітіна, ні timeвбудованого.
jpaugh

2
@jpaugh Не зовсім правильно. POSIX дозволяє timeбути лише зовнішнім, але ні type, typeвін доступний у всіх оболонних сумісних з POSIX оболонках.
heemayl

4

Ще одна відмінність між вбудованими та зовнішніми утилітами полягає в тому, що вбудований в 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
...

У той час, коли час визначений у стандарті, не визначено, як він повинен діяти в трубопроводі, тому можливі більш потужні внутрішні реалізації, як це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.