执行 /usr/bin/time 时没有该文件或目录

执行 /usr/bin/time 时没有该文件或目录

我正在构建自己的 android 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。

编辑:

出于某种原因,使用 make 而不是 mka 确实有效,但是使用姆卡更好。

/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon

编辑2: 来自cyanogenmod 网站

从您的 shell调用$ 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
}

答案1

问题在于它mka是您的脚本导出的一个 bash 函数,而不是一个可执行文件(与相反make),因此/usr/bin/time找不到它,因为它正在寻找一个可执行文件。

有两种可能的解决方案。

首先,请注意 bash 内置函数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获取 bash 内置程序的帮助time。键入man time获取可执行程序的帮助/usr/bin/time

第一个解决方案使用time,而第二个解决方案使用/usr/bin/time

第一个解决方案:使用 bash 内置函数time

bash 内置函数time可以识别已声明的 bash 函数,您可以立即使用它来测量此类函数的时间。

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

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

对于您来说,以下命令应该有效:

$ time mka -j8 bacon

这是我首选的方式。但是,它可能无法生成您想要的输出。特别是,它不会测量或打印 CPU 使用率。

第二种解决方案:使用可执行文件/usr/bin/time

您无法直接使用 来测量内置 bash 函数的时间/usr/bin/time(据我所知),但您可以测量/bin/bash执行该 bash 函数的可执行文件的时间。这有点不合时宜,而且由于您启动了一个额外的 实例,因此会产生一些开销bash。但是,当面对需要几分钟才能计算的函数时,这种开销可能可以忽略不计,因此它可能仍然更适合您的需求。

为了能够/bin/bash在 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

相关内容