AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1053023
Accepted
Socrates
Socrates
Asked: 2018-07-08 08:10:54 +0800 CST2018-07-08 08:10:54 +0800 CST 2018-07-08 08:10:54 +0800 CST

测量 bash 文件中的每个命令?

  • 772

有没有办法测量 bash 文件中每个命令所花费的时间?因此,将时间放在每个命令之前。命令的数量目前未知,因为我也打算将这个时间度量用于未来的 bash 脚本。另外值得一提的是,我打算只运行具有 command1、command2、command3 等的简单 bash 脚本。因此,没有复杂的更高逻辑脚本。

假设我有一个与此类似的 bash 文件:

#!/bin/bash

mv /path/to/file /other/path/
cd /other/path/
tar -xzf /other/path/file

有没有办法获得类似的输出?

 6.553s   mv /path/to/file /other/path/
 0.057s   cd /other/path/
19.088s   tar -xzf /other/path/file

我知道time我可以得到一个命令所花费的时间。但我正在寻找一种解决方案来测量每个命令本身的时间。

command-line bash time
  • 2 2 个回答
  • 180 Views

2 个回答

  • Voted
  1. Best Answer
    sudodus
    2018-07-08T08:45:44+08:002018-07-08T08:45:44+08:00

    您可以使用与以下示例类似的/usr/bin/time选项。-f在你的 shellscript 中的每个命令前面加上/usr/bin/time -f "%E %C"

    $ /usr/bin/time -f "%E %C" sleep 2.34
    0:02.34 sleep 2.34
    

    有关man time更多详细信息,请参阅。

    例子:

    我制作了一个小脚本,可以通过识别命令来修改简单的shellscript,可以使用/usr/bin/time. 让我们使用名称time2script。

    #!/bin/bash
    
    string='/usr/bin/time -f "%E %C"'
    
    while IFS= read -r line
    do
     cmd=$(<<< "$line" sed -e 's/ *//'|cut -d ' ' -f1)
     command=$(which "$cmd")
     if [ "$command" != "" ]
     then
      printf '%s %s\n' "$string" "$line"
     else
      printf '%s\n' "$line"
     fi
    done < "$1"
    

    使用time2script已编辑问题中的示例:

    $ ./time2script socrates1
    #!/bin/bash
    
    /usr/bin/time -f "%E %C" mv /path/to/file /other/path/
    cd /other/path/
    /usr/bin/time -f "%E %C" tar -xzf /other/path/file
    

    重定向以创建修改后的 shellscript,

    ./time2script socrates1 > socrates1-timing
    
    • 6
  2. wjandrea
    2018-07-08T10:30:02+08:002018-07-08T10:30:02+08:00

    这是天真的方法。它有几个失败点*,所以我不一定推荐使用它,只是想提一下。

    #!/bin/bash
    # Time each command in another Bash script.
    
    script="$1"
    
    # Skip blank lines and comments.
    grep -vE "^\s*($|#)" "$script" |
        while IFS= read -r line
    do
        echo "$line"
        time eval "$line"
    done
    

    示例脚本 foo.sh:

    #/bin/bash
    true
    sleep 2.34
    

    示例运行:

    $ bash naive_timer.sh foo.sh
    true
    
    real    0m0.000s
    user    0m0.000s
    sys     0m0.000s
    sleep 2.34
    
    real    0m2.342s
    user    0m0.000s
    sys     0m0.000s
    

    * 例如eval,多行命令会阻塞,例如函数声明、数组声明、heredocs,甚至多行引号。并且依赖于值的命令$0可能不起作用。

    • 2

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve