/ usr / bin /包含&符号的bash脚本的时间

时间:2014-01-16 15:35:34

标签: linux 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或经过时间)。

请注意,上面的脚本只是一个玩具示例。另外,假设它无法修改(将其视为黑盒子)。

2 个答案:

答案 0 :(得分:4)

是。在脚本末尾添加wait语句。这将导致该脚本“wait”以完成后台任务。

答案 1 :(得分:0)

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

答案是创建一个包装脚本wrapper.sh,如下所示:

#! /bin/sh
. $*; wait

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

现在可以按以下方式运行:

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

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