我在 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
。还有一个名为time
in 的单独程序/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。