有人告诉我,使用 bash 的人必须区分 shell 内置命令time
和/usr/bin/time
( time(1)
)。我必须对程序进行计时,还必须找到自动输入、使用echo
字符串重定向的方法<<<
。这些是结果,
$ time python3 -c "a=input("");print(a)" <<< "12"
12
real 0m0.023s
user 0m0.020s
sys 0m0.000s
在这种情况下调用 shell 内置函数。
$ echo "12" | time python3 -c "a=input("");print(a)"
12
0.01user 0.00system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 6524maxresident)k
0inputs+0outputs (0major+593minor)pagefaults 0swaps
time(1)
在这种情况下被调用。
为什么会出现这种情况?他们的环境不同吗?
使用 Ubuntu 14.04 x86_64
答案1
答案2
有两种类型的time
命令。一种是shell内置的,属于bash。这就是您在第一个示例中看到的。第二个,是/usr/bin/time
,这是你看到的第二个。至于为什么输出不同,这是因为您无法将输出通过管道传输到 shell 内置函数。
更多相关内容请点击这里
答案3
如果您出于性能原因喜欢对命令进行计时,我建议不要使用 /usr/bin/time 而是使用 ptime(1)(如果您的平台上可用) - ptime 提供纳秒分辨率 - 或者使用最新的 Bourne Shell,如Bourne Shell 允许在所有现代操作系统上以微秒分辨率自动计时所有前台命令(包括 shell 内置命令)。要对 Bourne Shell 中的所有前台命令进行计时,请调用:set -o time
并将 TIMEFORMAT 设置为有用的内容以获得更高分辨率,例如:%6:E real %6U user %6S sys %P%% cpu %I+%Oio %Fpf+%Ww
/usr/bin/time 通常具有 10ms 或 1ms 的固定分辨率。