我正在尝试编写一个脚本,该脚本将运行并定时给定并以.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
这可以按我想要的方式格式化吗?而且,在它之后的评论行,
这甚至会按我写的方式工作吗?语法是否正确?
答案 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(原因与上一个项目符号相同)