编写运行命令的脚本并对其进行计时

时间:2015-12-15 08:21:39

标签: bash time

我正在尝试编写一个脚本,该脚本将运行并定时给定并以.csv格式输出到该文件。

到目前为止,我没有看到以前的帖子,我发现可以使用sh -c "$index_of_command_arg"来调用该命令。

我也熟悉time,我知道人们使用/usr/bin/time进行格式化,但我需要格式化total seconds中给出的时间(例如1.34516 })但格式化实时的唯一给定选项是%E,它返回[hours:]minutes:seconds。有没有办法以我需要的方式格式化它?

我的脚本的一般想法是:

# ----
# some input validation
# ----
rule=$1
command=$2
execution_time=/usr/bin/time -f "%total_seconds" sh -c "$command" #is this line possible?
echo "$rule,$execution_time" > output_file.csv

这可以按我想要的方式格式化吗?而且,在它之后的评论行,
这甚至会按我写的方式工作吗?语法是否正确?

2 个答案:

答案 0 :(得分:0)

  

假设我使用正常时间,我得到real 0m2.003 ...   输出,如何从中取出2.003

您提及的正常时间bash内置time。来自Bash Reference Manual

  

TIMEFORMAT变量可以设置为格式字符串   指定如何显示定时信息。   ...   

%[p][l]R
  

以秒为单位的经过时间。

所以,你可以使用

execution_time=`TIMEFORMAT=%R bash -c "time $command" 2>&1 >/dev/tty`

答案 1 :(得分:-1)

您替换:

 execution_time=/usr/bin/time -f "%total_seconds" sh -c "$command" `  

with:

execution_time=`(time sh -c "$command > /dev/null 2>&1") 2>&1 | grep real |sed "s/.*m//;s/s.*//;"`    

或与:

execution_time=`(time sh -c "$command > /dev/null 2>&1") 2>&1 | grep real | cut -c 8-12`    
  • 为什么> /dev/null - 您不希望看到$command输出2>& 1(STDERR> STDOUT)
  • time命令的原因2>& 1(原因与上一个项目符号相同)