Використання вбудованої команди "time" в bash, а не зовнішня команда


12

Працюючи з timeкомандою, я натрапив на ситуацію, коли мені слід використовувати вбудовану, timeа не зовнішню команду часу GNU /usr/bin/time. Отже, як я можу це зробити? Десь я бачив, що використання enableта / або commandдопоможе, але вони цього не зробили.

Це випадок використання:

watch "time ls"

яка використовує зовнішню /usr/bin/timeкоманду, яку я не хочу! Це відбувається, коли timeвикликає внутрішню функцію bash, коли я працюю time lsна терміналі, наприклад:

$ time ls

Зверніть увагу, що тут відповіли прямо протилежний запит:

Існує велика різниця з двома командами. Внутрішня timeточніша (чого я хочу), але зовнішня команда має більше варіантів (які мені не потрібні).


watch 'bash -c "builtin time ls"'можливо?
glenn jackman

1
дивіться тут, як змусити bash використовувати вбудовані файли, див. відповідь Петра Утзла: builtin timeслід виконати трюк.
Фіксиман

2
@Fiximan, timeце не вбудований текст bash, це зарезервоване слово мови, щоб ви могли time foo | bartime for i in...;done
обміняти

Відповіді:


13

За замовчуванням watchзапускає вашу команду, /bin/sh -c '...'тому вихід, який ви бачите, - як /bin/shінтерпретує timeкоманду. У вас, /bin/shмабуть, немає вбудованого time.

Щоб запустити команду з іншою оболонкою, скористайтеся -xопцією, щоб позбутися від замовчування, а потім додайте власний явний виклик оболонки, вбудований у який ви хочете.

watch -x bash -c 'time ls'
watch -x zsh -c 'time ls'

Незалежно від того, як ви запускаєте watch, команда, яку ви переглядаєте, не є дочірньою оболонкою, яка виконувала watchкоманду, тому налаштування оболонки не мають прямого значення.

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