如何使以下命令替换起作用?
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ oldtime="$(time)"
bash: command substitution: line 23: syntax error near unexpected token `)'
bash: command substitution: line 23: `time)"'
我猜它不起作用,因为命令的输出有多行,因为一行输出有效:
$ oldtime="$(echo hello)"
$ echo $oldtime
hello
答案1
我不确定你想捕捉什么,因为time
没有写入标准输出:
$ time > tmpfile
real 0m0.000s
user 0m0.000s
sys 0m0.000s
而且你并没有真正“计时”任何事情。
oldtime="$(time echo)"
不会引发错误,但仍将时间打印到标准输出。
你可能想做类似的事情
$ oldtime="$( { time ; } 2>&1 )"
答案2
在这样的子 shell 中运行时,您可能希望改用times
。它基本上是相同的 - 只是它不是报告作为参数传递给它的管道的处理时间,而是报告其父 shell 使用的处理时间(阅读:命令子 shell)以及自调用其父 shell 以来的所有子级 - 并且它应该写入标准输出。
所以你可以这样做:
pipeline_out=$(some | arbitrary | pipeline; times)
……抓住一切。
或者只是查看当前 shell 会话的使用摘要:
times