精通Bash脚本:time命令的高效运用策略

在 Bash 脚本中,你可以使用 time 命令来测量一个命令或一组命令的执行时间。time 命令会返回三个主要的时间值:实际时间(real)、用户CPU时间(user)和系统CPU时间(sys)。

图片[1]_精通Bash脚本:time命令的高效运用策略_知途无界

使用方式

简单用法
在命令行中直接前缀 time 命令,后面跟上你想要测量的命令。例如:

    time ls

    这会显示 ls 命令的执行时间。

    在脚本中使用
    在 Bash 脚本中,你可以将 time 命令与花括号 {} 结合使用来测量一组命令的执行时间。例如:

      {
          sleep 2
          echo "Hello, World!"
      }
      time

      注意,这种方法不会直接显示时间输出到脚本的标准输出中,而是会显示在终端上。如果你需要在脚本中捕获 time 命令的输出,可以使用以下方法:

      捕获 time 命令的输出
      使用 $(...) 命令替换和 echo 命令可以捕获 time 命令的输出。但是,由于 time 是一个内置命令,不是外部程序,所以直接捕获其输出并不简单。一种方法是使用 bash -c

        TIMEFORMAT=%R\ %U\ %S\n  # 设置时间格式为:实际时间 用户时间 系统时间(换行)
        start_time=$(date +%s%N)  # 获取开始时间(纳秒)
        {
            sleep 2
            echo "Hello, World!"
        } | bash -c 'time for i in "$@"; do "$i"; done' bash _
        end_time=$(date +%s%N)  # 获取结束时间(纳秒)
        elapsed_time=$(( (end_time - start_time) / 1000000 ))  # 计算经过的时间(毫秒)
        echo "Elapsed time: $elapsed_time ms"

        上面的脚本尝试了一种复杂的方法来捕获 time 的输出,但实际上,这种方法并不推荐,因为它依赖于对 bash -c 的特殊用法,并且可能不够准确或可靠。一个更简单且准确的方法是使用 SECONDS 内置变量(注意:单位为秒,不是毫秒):

          SECONDS=0  # 重置SECONDS变量
          {
              sleep 2
              echo "Hello, World!"
          }
          elapsed_seconds=$SECONDS
          echo "Elapsed time: $elapsed_seconds seconds"
          © 版权声明
          THE END
          喜欢就点个赞,支持一下吧!
          点赞38 分享
          评论 抢沙发
          头像
          欢迎您留下评论!
          提交
          头像

          昵称

          取消
          昵称表情代码图片

            暂无评论内容