【发布时间】:2011-06-04 18:53:22
【问题描述】:
我想用 time 命令运行一些可执行文件
time myexec -args
如何仅将时间输出存储到 bash 中的变量?这是我关心这个脚本的唯一部分,而不是可执行文件的输出。有没有办法获得该值,还是我必须解析整个命令的文本?
【问题讨论】:
我想用 time 命令运行一些可执行文件
time myexec -args
如何仅将时间输出存储到 bash 中的变量?这是我关心这个脚本的唯一部分,而不是可执行文件的输出。有没有办法获得该值,还是我必须解析整个命令的文本?
【问题讨论】:
在一个变量中捕获的所有输出(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
这样的?
TIME="$(sh -c "time myexec -args &> /dev/null" 2>&1)"
【讨论】:
&> 在 POSIX sh 脚本中无效,并且以名称 sh 调用的 shell 保证您没有标准中未指定的功能。 (例如,这绝对会在 Debian 或 Ubuntu 系统上中断,其中 sh 由破折号实现)。
sh -c 时,它不再是 bash(如果您使用的是 Debian、Ubuntu 等);哪个 shell 用于 invoke sh 与哪个 shell 在给定系统上实际实现 sh 的问题无关。
其实我也发现了这个——How to store a substring of the output of "time" function in bash script
可能更接近我要找的东西
【讨论】:
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`
【讨论】:
$() instead of backticks,你就不必解释了。