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

Linux /包含符号的bash脚本的usr/bin/time,linux,bash,Linux,Bash,假设我们有一个包含命令的bash脚本,其中一些命令可以有符号(&)。 我想使用/usr/bin/time来度量这样一个脚本的执行时间,但由于使用了符号AND,实际工作在后台完成,而脚本将命令返回shell,结果度量值等于零 是否有抑制符号和行为的方法(即不允许在后台运行命令) 我之所以尝试这样做,是因为我想做一个大规模的基准测试(大量的数据集,以及多个工具(其中一些工具表现出这种行为)) 下面是一个具体的、非常简单的例子 创建包含以下内容的脚本test.sh: #! /bin/sh sleep

假设我们有一个包含命令的bash脚本,其中一些命令可以有符号(
&
)。 我想使用/usr/bin/time来度量这样一个脚本的执行时间,但由于使用了符号AND,实际工作在后台完成,而脚本将命令返回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
(source命令)将强制在同一shell中而不是在后台执行作业,
wait
将等待所有子进程完成

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

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

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

好吧,不使用符号?我不是在编写基准测试工具:)这只是我认为这些工具中正在发生的一个玩具示例…脚本应该保持原样,不应该修改,解决方案必须来自脚本外部。@isovic编写一个脚本来调用要计时的脚本,在这个新脚本的末尾添加一个等待。@isovic使其
/test.sh;等待
。使用
,后台作业和
等待
内置程序由同一个shell执行,这是该程序工作所必需的。@isovic如果您运行两个不同的程序,它们位于不同的进程中。shell脚本和Perl脚本是两个不同的程序。如果您使用
/pl
,您告诉shell解析并运行Perl脚本,但这行不通。你想解决什么问题?@isovic好的。你的问题看起来像一个空壳问题(从公式和标签来看),所以它得到了空壳答案。我建议你问一个新问题。您应该提供更多关于为什么需要它的信息,因为没有简单的解决方案,所以任何解决方案都可能需要一些假设。