Я строю свой собственный Android-ром. Чтобы его построить, мне нужно запустить
mka -j8 bacon
Тем не менее, я хотел измерить время, необходимое для его создания, поэтому я использовал
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Это не будет работать, потому что это говорит
/usr/bin/time: cannot run mka: No such file or directory
Любая помощь, как обойти это, приветствуется! Я бегу xubuntu.
Редактировать:
По какой-то причине использование make вместо mka работает, однако лучше использовать mka .
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Редактировать 2: с сайта cyanogenmod
Вызов
$ source build/envsetup.sh
или$ . build/envsetup.sh
из вашей оболочки запускает скрипт envsetup.sh в каталоге сборки. envsetup.sh добавляет множество функций в среду сборки, наиболее важные из которых перечислены ниже.
source build/evnsetup.sh
это команда, которую я запускаю до выполнения времени. Одна из тех добавленных функций evnsetup.sh - mka
это можно вызвать из time
команды?
Редактировать 3: Вывод типа mka
$ type mka
mka is a function
mka ()
{
case `uname -s` in
Darwin)
make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
;;
*)
schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
;;
esac
}
источник
source build/evnsetup.sh
, в тот момент, когда вы хотите позвонитьtime mka -j8 bacon
, можете ли вы опубликовать вывод командыtype mka
?Ответы:
Проблема в том, что
mka
это функция bash, экспортируемая вашим сценарием, а не исполняемый файл (в отличие отmake
), поэтому/usr/bin/time
не находит ее, так как ищет исполняемый файл.Есть два возможных решения.
Во-первых, обратите внимание, что есть разница между встроенной функцией bash
time
и исполняемым файлом/usr/bin/time
. Это разные команды, которые принимают разные параметры и генерируют разные выходные данные:Введите,
help time
чтобы получить помощь для встроенного Bashtime
. Введите,man time
чтобы получить помощь для исполняемого файла/usr/bin/time
.Первое решение использует
time
, тогда как второе решение использует/usr/bin/time
.Первое решение: использование встроенной функции bash
time
Встроенная функция
time
bash знает о объявленных функциях bash, и вы можете сразу же использовать ее для измерения времени таких функций.В вашем случае следующая команда должна работать:
Это был бы мой предпочтительный путь. Тем не менее, он может не генерировать именно тот результат, который вы хотите. В частности, он не измеряет и не печатает данные об использовании процессора.
Второе решение: использование исполняемого файла
/usr/bin/time
Вы не можете напрямую измерить время встроенной функции bash, используя
/usr/bin/time
(насколько я знаю), но вы можете измерить время/bin/bash
исполняемого файла, выполняющего эту функцию bash. Это немного странно, и это порождает небольшие накладные расходы, когда вы запускаете дополнительный экземплярbash
. Но эти накладные расходы могут быть незначительными, когда они сталкиваются с функцией, которая занимает минуты, чтобы вычислить, так что она все равно может лучше удовлетворить ваши потребности.Чтобы иметь возможность запустить
/bin/bash
исполняемый файл в функции bash, мы должны сначала экспортировать функцию.Следовательно, в вашем случае, чтобы иметь возможность использовать
/usr/bin/time
и генерировать желаемый выходной формат, вы можете действовать следующим образом:источник
-f
параметр, я так и не смог найти. Во-вторых, что делает / bin / bash? Действительно ценю это!-f
Параметрexport
указываетexport
экспортировать функцию оболочки. Смhelp export
.-f
Параметр/usr/bin/time
указывает/usr/bin/time
ожидать формат строки, но я предполагаю , что это вы знаете./bin/bash
Часть последней команды является Баш исполняемой, выполнение время фактически измеряется, когда он сам выполняет экспортированнуюmka
функцию. Он выполняетmka
функцию, потому что читает и выполняетmka -j8 bacon
команду из стандартного ввода, поэтому мы используемecho
и конвейер. Извините за поздний ответ, просто прочитайте это. :)