abu*_*ker 89 unix shell time io-redirection
我试图重定向时间命令的输出,但我不能:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
在文件中,我可以看到ls命令的输出,而不是time.请解释一下,为什么我不能以及如何做到这一点.
gho*_*g74 120
无需启动子shell.使用代码块也可以.
{ time ls; } 2> out.txt
Run Code Online (Sandbox Code Playgroud)
要么
{ time ls > /dev/null 2>&1 ; } 2> out.txt
Run Code Online (Sandbox Code Playgroud)
sga*_*esh 98
您可以使用重定向时间输出,
(time ls) &> file
Run Code Online (Sandbox Code Playgroud)
因为你需要把(时间ls)作为一个命令,所以你可以使用大括号.
Mne*_*nth 24
命令时间将其输出发送到STDERR(而不是STDOUT).这是因为正常执行的命令(在本例中为ls)输出到STDOUT.
如果要捕获时间输出,请键入:
(time ls) 2> filename
Run Code Online (Sandbox Code Playgroud)
它仅捕获时间输出,但ls的输出正常到控制台.如果要在一个文件中捕获两者,请键入:
(time ls) &> filename
Run Code Online (Sandbox Code Playgroud)
2>重定向STDERR,&>重定向两者.
时间是内置的,我不确定是否有办法重定向它.但是你可以使用
/usr/bin/time,它肯定接受任何输出重定向.
如果您不想混合time命令的输出。使用 GNU 时间,您可以使用-o file:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
Run Code Online (Sandbox Code Playgroud)
whiletim是时间的输出,out是err来自 的 stdout 和 stderr grep。
重定向似乎不起作用的原因time是它在管道前使用时是 bash 保留字(不是内置字!)。重击(1):
如果时间保留字位于管道之前,则在管道终止时报告其执行所消耗的用户和系统时间。
因此,要重定向 的输出time,请使用花括号:
{ time ls; } 2> filename
Run Code Online (Sandbox Code Playgroud)
或致电/usr/bin/time:
/usr/bin/time ls 2> filename
Run Code Online (Sandbox Code Playgroud)