【问题标题】:Comparing output of time command in shell to a constant [duplicate]将shell中的时间命令输出与常量进行比较[复制]
【发布时间】:2021-08-10 19:29:22
【问题描述】:

我想在 shell 中测量执行脚本需要多长时间。我使用内置命令“时间”。

例如对于

time (sleep 5)

我明白了

real    0m5,003s
user    0m0,001s
sys     0m0,000s

现在我想比较一下实际持续时间(0m5,003s)是否小于 10 秒。

如何访问实时使用它?

【问题讨论】:

  • 我不能打招呼哈哈。所以大家好:)
  • 这能回答你的问题吗? Parsing the output of Bash's time builtin
  • 嗨@U880D 谢谢你的链接。我是shell的初学者,我真的不明白如何去做。我想从输出中保存实时时间并将其用于进一步的应用程序。
  • 没问题,我们都是初学者。您的问题的解决方案是there。我几乎只会重复已经以非常好的方式解释过的内容。你可以先看看echo $(TIMEFORMAT='%R'; { time sleep 5; } 2>&1)的结构。
  • @psad:这可能会有所帮助:serverfault.com/questions/175376/…

标签: bash shell time


【解决方案1】:

请看下面的代码,它将重定向到一个变量和不同的选项,你可以通过它来实现它:
选项 1

# !/usr/bin/bash
var=`(time (sleep 5)) 2>&1 | grep real`

输出: 真实0m5.069s

您可以在其中执行您的脚本,如下所示:

# !/usr/bin/bash
var=`(time sh  ./yourscript.sh) 2>&1 | grep real`

选项 2:获取脚本执行所用的时间

# !/usr/bin/bash
start=$(date +%s)
# Execute another script
sh  ./yourscript.sh
end=$(date +%s)
diff=$(( $end- $start))
echo "It took $diff seconds"

输出:耗时 5 秒

选项 3

# !/usr/bin/bash
#var=$( TIMEFORMAT="%R"; { time  (sleep 5); } 2>&1 )  
var=$( TIMEFORMAT="%R"; { time  sh  ./yourscript.sh; } 2>&1 ) 

基于@Charles Duffy 的良好反馈:更改了一些部分和
如果以 bash 4.3 或更高版本为目标,请考虑将printf -v start '%(%s)T' -1 作为start=$(date +%s) 的更有效替代方案。

【讨论】:

【解决方案2】:

对于 bash,如果您只需要以秒为单位的持续时间,请使用内置的 SECONDS 变量:

SECONDS=0
some long running process here
duration=$SECONDS

if ((duration > 10)); then
    echo "it took a long time"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2019-08-20
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-07-02
    • 2021-06-13
    相关资源
    最近更新 更多