【问题标题】:Linux CMD - How to measure the time for two commands after each other?Linux CMD - 如何测量两个命令的时间?
【发布时间】:2020-01-21 12:56:39
【问题描述】:

我知道我可以通过在命令前面写 time 来找到命令所用的时间,例如 for

time git pull

我也知道我可以通过使用“;”来依次执行两个命令符号,例如 in

git pull ; git reset

但是,我不知道如何将两者结合起来。

time git pull ; git rebase

这只是花费第一个命令的时间并在执行第二个命令之前打印它。我想在两个命令都完成后打印两个命令的组合时间。有人知道如何实现吗?

【问题讨论】:

    标签: linux time


    【解决方案1】:

    只需使用括号:

    # time sleep 1; sleep 1     # <-- this does not work
    
    real    0m1.003s
    user    0m0.001s
    sys     0m0.001s
    # time (sleep 1; sleep 1)   # <-- this one works
    
    real    0m2.004s
    user    0m0.001s
    sys     0m0.002s
    

    我建议尽管使用&amp;&amp; 而不是;,比如

    # time (sleep 1 && sleep 1)
    

    这样第二个命令只有在第一个命令成功时才会执行。使用;,无论如何都会执行这两个命令。只是我的喜好。

    【讨论】:

      【解决方案2】:

      您可以使用括号和 && 作为命令分隔符。

      或者,您可以创建一个脚本并

      time yourscript.sh
      

      同样的效果。

      您也可以通过测量操作前后的时间并计算差异来做到这一点:

      start=`date +%s`
      sleep 5
      end=`date +%s`
      runtime=$((end-start))
      echo $runtime
      

      【讨论】:

        【解决方案3】:

        由于您已经标记了 linux,我将假设您正在使用内置的 time 来 bash,尽管这个答案的大部分内容通常适用于任何 shell。在 bash 文档中,我们读到:

        *管道是由一个或多个命令组成的序列,由其中一个控制运算符分隔 |或 |&。管道的格式为:

         [time [-p]] [ ! ] command [ [|||&] command2 ... ]*
        

        所以我们看到时间被应用于由命令组成的管道。命令可以是复合命令,其中一种形式是{ list: }。所以,对于你的情况,你可以写:

        time { git pull; git rebase; }
        

        (尽管对于这种特殊情况,time git rebase -r 似乎更好)

        【讨论】:

        • 谢谢!事实上,“案例”实际上并不是关于 git 的。我只是选择了两个 git 命令作为简单的示例
        猜你喜欢
        • 2019-03-11
        • 2014-08-18
        • 2018-03-15
        • 2021-07-03
        • 1970-01-01
        相关资源
        最近更新 更多