【问题标题】:get values from 'time' command via bash script [duplicate]通过 bash 脚本从“时间”命令中获取值 [重复]
【发布时间】:2011-06-04 18:53:22
【问题描述】:

我想用 time 命令运行一些可执行文件

time myexec -args

如何仅将时间输出存储到 bash 中的变量?这是我关心这个脚本的唯一部分,而不是可执行文件的输出。有没有办法获得该值,还是我必须解析整个命令的文本?

【问题讨论】:

    标签: bash shell scripting time


    【解决方案1】:

    BashFAQ/032

    在一个变量中捕获的所有输出(stdout、stderr 和time):

    var=$( { time myexec -args; } 2>&1 )
    

    输出到 stdout 和 stderr 到它们的正常位置:

    exec 3>&1 4>&2
    var=$( { time myexec -args 1>&3 2>&4; } 2>&1 )  # Captures time only.
    exec 3>&- 4>&-
    

    【讨论】:

    • ; 对命令非常重要。这是我在命令中所缺少的。我不断收到语法错误。谢谢!
    • $ var=$( { time ls -args 1>&3 2>&4; } 2>&1 ) / $ echo $var / -bash: 3: Bad file descriptor real 0m0.002s user 0m0.001s sys 0m0.001s
    【解决方案2】:

    这样的?

    TIME="$(sh -c "time myexec -args &> /dev/null" 2>&1)"
    

    【讨论】:

    • &> 在 POSIX sh 脚本中无效,并且以名称 sh 调用的 shell 保证您没有标准中未指定的功能。 (例如,这绝对会在 Debian 或 Ubuntu 系统上中断,其中 sh 由破折号实现)。
    • 好点,但问题是专门针对 bash 的。
    • OP 可能是从 bash 中调用此代码,但是当您运行 sh -c 时,它不再是 bash(如果您使用的是 Debian、Ubuntu 等);哪个 shell 用于 invoke sh 与哪个 shell 在给定系统上实际实现 sh 的问题无关。
    【解决方案3】:

    其实我也发现了这个——How to store a substring of the output of "time" function in bash script

    可能更接近我要找的东西

    【讨论】:

    • 这应该是重复投票,而不是答案。
    • 这是一个仅链接的答案。它需要一些细节以避免链接失效。
    【解决方案4】:

    BASH 有其内置的变体time。如果您执行man time,您会发现其中列出的许多选项不适用于time 命令。手册页警告 BASH 用户,他们可能会使用指向 time 的显式路径。

    在 Ubuntu 上显式路径是 /usr/bin/time,但您可以通过 $ which time 找到它。

    通过正确的路径,您可以使用 -f--format 选项和许多格式化参数,这些参数可以很好地格式化您的结果,您也可以将其存储到变量中。

    STUFF_HERE=`/usr/bin/time -f %E sleep 1 2>&1`

    【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多