Работая с time
командой, я столкнулся с ситуацией, когда я должен использовать встроенную, time
а не внешнюю команду времени GNU /usr/bin/time
. Итак, как я могу это сделать? Я где-то видел, что использование enable
и / или command
поможет, но они этого не сделали.
Это вариант использования:
watch "time ls"
который использует внешнюю /usr/bin/time
команду, которую я не хочу! Это происходит, когда time
при запуске time ls
на терминале вызывает внутреннюю функцию bash , например:
$ time ls
Обратите внимание, что прямо противоположный запрос был дан ответ здесь:
Существует большая разница с двумя командами. Внутренняя time
более точная (что я хочу), но внешняя команда имеет больше опций (которые мне не нужны).
watch 'bash -c "builtin time ls"'
возможно?builtin time
должно получиться.time
не является встроеннымbash
, это зарезервированное слово языка, поэтому вы можете рассчитывать конвейеры (напримерtime foo | bar
) или составные команды (напримерtime for i in...;done
)Ответы:
По умолчанию
watch
ваша команда запускается/bin/sh -c '...'
так, что вы видите, как/bin/sh
интерпретироватьtime
команду. У тебя,/bin/sh
очевидно, нет встроенногоtime
.Чтобы запустить команду с другой оболочкой, используйте
-x
опцию, чтобы избавиться от значения по умолчанию, затем добавьте свой собственный явный вызов оболочки, встроенную в которую вы хотите.Независимо от того, как вы выполняете
watch
, команда, которую вы смотрите, не является дочерней для оболочки, которая выполнялаwatch
команду, поэтому параметры оболочки не имеют прямого отношения.источник