Никакой такой файл или каталог при выполнении/usr/bin/time

Я создаю свой собственный андроид rom. Для создания его я должен работать

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.

Править:

По некоторым причинам, использование делают вместо 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
}
11
задан 2 February 2017 в 01:06

1 ответ

Проблема - это mka функция удара, экспортируемая Вашим сценарием и не исполняемым файлом (в противоположность make), таким образом, /usr/bin/time не находит его, поскольку это ищет исполняемый файл.

Существует два возможных решения.

Во-первых, обратите внимание, что существует различие между встроенной функцией удара time, и исполняемый файл /usr/bin/time. Это различные команды, которые берут различные параметры и генерируют другой вывод:

$ time sleep 1

real    0m1.001s
user    0m0.000s
sys     0m0.001s

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 664maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps

Ввести help time получить справку для встроенного удара time. Ввести man time получить справку для исполняемого файла /usr/bin/time.

Первое использование решения time, тогда как второе решение использует /usr/bin/time.

Первое решение: использование встроенной функции удара time

Встроенная функция удара time знает о заявленных функциях удара, и можно сразу использовать его для измерения времени таких функций.

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ time foo
Hello World

real    0m1.002s
user    0m0.000s
sys     0m0.001s

В Вашем случае должна работать следующая команда:

$ time mka -j8 bacon

Это было бы моим предпочтительным путем. Однако это не может генерировать точно вывод, который Вы хотите. В частности, это не измеряет или печатает использование ЦП.

Второе решение: использование исполняемого файла /usr/bin/time

Вы не можете непосредственно измерить время встроенного использования функции удара /usr/bin/time (насколько я знаю), но что можно сделать, измерить время /bin/bash исполняемый файл, выполняющий ту функцию удара. Это - немного hacky, и он генерирует немного служебное, поскольку Вы запускаете дополнительный экземпляр bash. Но эти издержки могут быть незначительными, когда сталкивающийся с функцией, которая занимает минуты для вычислений, таким образом, они могут все еще удовлетворить потребностям лучше.

Смочь запуститься /bin/bash исполняемый файл на функции удара, мы должны экспортировать функцию сначала.

$ foo() {
    sleep 1;
    echo "Hello World"
  }
$ export -f foo
$ echo foo | /usr/bin/time /bin/bash
Hello World
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 1476maxresident)k
0inputs+0outputs (0major+707minor)pagefaults 0swaps

Следовательно, в Вашем случае, чтобы смочь использовать /usr/bin/time и генерируйте выходной формат, который Вы хотите, Вы могли продолжить двигаться следующим образом:

$ export -f mka
$ echo 'mka -j8 bacon' | /usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" /bin/bash
11
ответ дан 23 November 2019 в 04:06

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

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