命令的多行输出的命令替换?

命令的多行输出的命令替换?

如何使以下命令替换起作用?

$ 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

相关内容