bash脚本在文件中写入执行时间

时间:2012-11-01 11:59:23

标签: bash

我需要在txt文件中写下执行此命令所花费的时间:

time ./program.exe

我怎么能用bash脚本做什么?

我尝试使用>> time.txt,但这不起作用(输出不会转到文件并转到屏幕上)。

4 个答案:

答案 0 :(得分:21)

time bash写入文件是一项艰苦的工作。它是bash内置命令。 (在Mac OS X上,有一个外部命令/usr/bin/time,它执行类似的工作,但具有不同的输出格式和较少的顽固性。)

您需要使用:

(time ./program.exe) 2> time.txt

它写入标准错误(因此为2>表示法)。但是,如果您不使用子shell(括号),它将不起作用;输出仍然出现在屏幕上。


或者,如果没有子shell,您可以使用:

{ time ./program.exe; } 2> time.txt

注意打开支架和分叉后的空间;两者都是必须的。大括号必须出现在命令可能出现的位置,并且必须是独立符号。 (如果你足够努力,你会得到...;}|something...;}2>&1。但是这两个都将大括号标识为独立符号。如果你尝试...;}xyz,shell将会(可能)无法找到名为}xyz的命令。)


  

我需要在更多终端运行更多命令。如果我这样做:

 xterm -xrm '*hold: true' -e (time ./Program.exe) >> time.exe & sleep 2
     

它不起作用并告诉我Syntax error: "(" unexpected。我该如何解决这个问题?

您需要执行以下操作:

xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"

关键的变化是运行shell,脚本来自-c选项的参数;您可以使用sh或同等名称替换/bin/bash。这应该解决任何“语法错误”问题。我不太确定是什么触发了这个错误,因此可能有一种更简单,更好的方法来处理它。也可以想象xterm的{​​{1}}选项只接受一个字符串参数,在这种情况下,我想你会使用:

-e

您也可以手动bash xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'

我不确定为什么你在后台模式下运行定时程序,但这是你的问题,而不是我的问题。同样,如果xterm保持终端开放,则sleep 2显然不是必需的。

答案 1 :(得分:0)

重定向bas​​h内置time的输出并不容易。

一种解决方案是使用外部time程序:

/bin/time --append -o time.txt ./program.exe

(在大多数系统上,它是一个GNU程序,因此请使用info time而不是man来获取其文档。

答案 2 :(得分:0)

TIME_ELAPSED = (time sh -c "./program.exe") 2>&1 | grep "real" | awk '{print $(NF)}' echo time_elapsed> file.txt的 此命令应该为您提供所需文件中bash消耗的确切时间..

您还可以将其重定向到文件usng 2> file.txt,如另一个回复中所述。

答案 3 :(得分:0)

只需将命令括在{ .. }

中的时间
{ time ./program.exe; } 2>&1

当然,内置时间的输出转到stderr,因此需要重定向2>&1

然后,捕获输出似乎很棘手,让我们使用第二个{ .. }来更轻松地读取命令,这可行:

{ { time ./program.exe; } 2>&1; } >> time.txt              # This works.

但是,正确的构造应该只是将捕获反转,如下所示:

{ time ./program.exe; } >> time.txt  2>&1;                 # Correct.

要关闭命令的任何可能输出,请将其输出重定向到/ dev / null,如下所示:

{ time ./program.exe >/dev/null 2>&1; } >> time.txt 2>&1   # Better.

而且,由于现在只有stderr的输出,我们可以简单地捕获它:

{ time ./program.exe >/dev/null 2>&1; } 2>> time.txt       # Best.

./program的输出应该被重定向,或者它可能会在time.txt内结束。