在bash中获取时间(1)的输出 我用BASH编译C++和java程序。 我需要使用time添加的数据“real”、“User”、“Sys”。 即使我使用var=$(compile)来获取输出,它也没有显示任何内容

在bash中获取时间(1)的输出 我用BASH编译C++和java程序。 我需要使用time添加的数据“real”、“User”、“Sys”。 即使我使用var=$(compile)来获取输出,它也没有显示任何内容,bash,time,compilation,Bash,Time,Compilation,有没有一种方法可以作为变量获取超时数据 编辑: 我正在用一个进程运行Java上的bash,并用BufferReader读取InputStream。您可以获得完整的输出time echo“hi”,并将其保存到一个变量中: stats=$({ time echo "hi"; } 2>&1) stats=$({ time echo "hi" 1>/dev/null 2>&1; } 2>&1) 或文件: { time echo "hi"; } >

有没有一种方法可以作为变量获取超时数据

编辑:


我正在用一个进程运行Java上的bash,并用BufferReader读取InputStream。

您可以获得完整的输出
time echo“hi”
,并将其保存到一个变量中:

stats=$({ time echo "hi"; } 2>&1)
stats=$({ time echo "hi" 1>/dev/null 2>&1; } 2>&1)
或文件:

{ time echo "hi"; } >mylogfile.txt 2>&1
{ time echo "hi" 1>/dev/null 2>&1; } 2>mylogfile.txt
这里的大括号语法让bash知道您需要什么实际信息。因为时间在bash中是一个保留字(如
if
while
),以及一个内置的重定向
stdout
stderr
,不带大括号将不会重定向
time
的输出。为此,我们需要将命令的所有输出分组在一起,然后重定向它

但是,如果您只需要计时信息,我们可以将命令信息重定向到void
/dev/null
,并只保留
时间
的输出。我们可以将其保存到变量:

stats=$({ time echo "hi"; } 2>&1)
stats=$({ time echo "hi" 1>/dev/null 2>&1; } 2>&1)
或文件:

{ time echo "hi"; } >mylogfile.txt 2>&1
{ time echo "hi" 1>/dev/null 2>&1; } 2>mylogfile.txt

您可以获得完整的输出
时间回声“hi”
,并将其保存到变量中:

stats=$({ time echo "hi"; } 2>&1)
stats=$({ time echo "hi" 1>/dev/null 2>&1; } 2>&1)
或文件:

{ time echo "hi"; } >mylogfile.txt 2>&1
{ time echo "hi" 1>/dev/null 2>&1; } 2>mylogfile.txt
这里的大括号语法让bash知道您需要什么实际信息。因为时间在bash中是一个保留字(如
if
while
),以及一个内置的重定向
stdout
stderr
,不带大括号将不会重定向
time
的输出。为此,我们需要将命令的所有输出分组在一起,然后重定向它

但是,如果您只需要计时信息,我们可以将命令信息重定向到void
/dev/null
,并只保留
时间
的输出。我们可以将其保存到变量:

stats=$({ time echo "hi"; } 2>&1)
stats=$({ time echo "hi" 1>/dev/null 2>&1; } 2>&1)
或文件:

{ time echo "hi"; } >mylogfile.txt 2>&1
{ time echo "hi" 1>/dev/null 2>&1; } 2>mylogfile.txt

时间输出转到错误输出,因此您可以在过程中使用,然后您将从时间中获得输出。

时间输出转到错误输出,因此您可以在过程中使用,然后您将从时间中获得输出。

跨站点重复:并且密切相关(询问重定向到文件的问题,但根本问题是相同的):和跨站点复制:密切相关(询问重定向到文件的问题,但根本问题是相同的):而且
时间
至少在Bash中更可能是内置的,因此
人工时间
没有权威性,因为它指的是
/usr/bin/time
或安装在任何地方的二进制文件<代码>帮助时间或Bash手册页必须被查阅。(这对重定向stderr的解决方案有影响。)
帮助时间
在我看来是毫无帮助的。
人时间
至少指出输出在stderr中,即使它不应该被视为福音。有用与否,
man time
谈论在执行
time
时最有可能没有执行的内容。它不是Bash附带的
ManBash
在SHELL语法/管道下有更多信息,但仍然没有提到输出到stderr。可以说,写入stderr简单且直观,因为从
时间
的输出会污染正在测量的管道。
时间
至少在Bash中更可能是内置的,因此
人工时间
不具权威性,因为它指的是
/usr/bin/time
或安装在任何地方的二进制文件<代码>帮助时间或Bash手册页必须被查阅。(这对重定向stderr的解决方案有影响。)
帮助时间
在我看来是毫无帮助的。
人时间
至少指出输出在stderr中,即使它不应该被视为福音。有用与否,
man time
谈论在执行
time
时最有可能没有执行的内容。它不是Bash附带的
ManBash
在SHELL语法/管道下有更多信息,但仍然没有提到输出到stderr。可以说,向stderr编写代码简单而且直观,因为如果不这样,
time
的输出会污染正在测量的管道。