/usr/bin/time包含与符号的bash脚本



假设我们有一个包含命令的bash脚本,其中一些命令可以具有与号(&)符号。我想使用/usr/bin/time来测量这样一个脚本的执行时间,但由于使用了"与"符号,实际工作是在后台完成的,而脚本将命令返回到shell,结果测量值等于零。

有没有办法抑制"与"的行为(即不让命令在后台运行)?

我之所以尝试这样做,是因为我想做一个大规模的基准测试(大量的数据集和多个工具(其中一些表现出这种行为))。

一个具体的、非常简单的例子如下。

创建包含以下内容的脚本test.sh

#! /bin/sh
sleep 2 &

试着用运行它

/usr/bin/time ./test.sh

结果是:

0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 668maxresident)k
0inputs+0outputs (0major+219minor)pagefaults 0swaps

预期的结果大约是2秒(cpu或运行时间)。

请注意,上面的脚本只是一个玩具示例。此外,假设它不能被修改(将其视为一个黑框)。

是。在脚本末尾添加一个wait语句。这将导致该脚本"等待"后台任务完成。

这是Elliott Frisch和Gilles(在评论中)的回答的组合,旨在总结问题。

答案是创建一个包装脚本wrapper.sh,看起来像:

#! /bin/sh
. $*; wait

.(源命令)将强制作业在同一shell中执行,而不是在后台执行,wait将等待所有子流程完成。

现在可以运行为:

/usr/bin/time ./wrapper.sh ./test.sh

请注意,使用source命令可以防止您更改test.sh的shebang行中的解释器。

相关内容

  • 没有找到相关文章

最新更新