`time` 在哪里输出其结果?

`time` 在哪里输出其结果?

我在 Ubuntu 上。

运行time似乎将其结果输出到STDOUT或之外的其他位置STDERR。以下是我这么认为的原因:

[siminm@amide ~]$ time echo hi
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>/dev/null 
hi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi 2>&1 >/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
[siminm@amide ~]$ time echo hi &>/dev/null 

real    0m0.000s
user    0m0.000s
sys 0m0.000s

然而

[siminm@amide ~]$ /usr/bin/time echo hi 2>/dev/null 
hi

答案1

您的 shell(可能是 bash)提供了一个内置命令time。还有一个名为timein 的单独程序/usr/bin/,它位于您的 中$PATH。两者的行为不同。如果您希望所有配置都保持一致,则应使用程序/usr/bin/time而不是 bash 内置命令time

答案2

您始终只是重定向命令的输出。由于时间写入 stderr,请尝试以下操作:

(time ls >> /stdout/output/of/ls 2>> /stderr/output/of/ls) 2>> /output/of/time

答案3

“time”内置输出到 stderr 指向的位置重定向确实会发生。

任何非内置命令(例如 /usr/bin/time)都无法覆盖重定向,因为它们在启动之前发生,因此其输出转到 stderr。

相关内容