无法将 stdout/stderr 重定向到日志文件

无法将 stdout/stderr 重定向到日志文件

我有一个脚本tmp.sh

#!/bin/bash

echo hello
sleep 3
echo 3

我想将脚本运行时间(以及脚本标准输出)记录到日志文件中。

user$ time ./tmp.sh >& log.tmp

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

不起作用。

user$ time ./tmp.sh 2>&1 log.tmp
hello
3

real    0m3.003s
user    0m0.002s
sys     0m0.001s

这也行不通。

time将命令的输出记录到日志文件的正确方法是什么?

答案1

的内置time命令bash在命令(实际命令)返回后显示 STDERR 上的计时信息。因此,除非您将它们分组并将该组的 STDERR 传递到文件,否则只有实际命令的 STDERR 才会被重定向到该文件,并且当命令返回时(在time显示其信息之前)该文件将被关闭。

您可以使用命令分组,重定向 STDOUT 和 STDERR:

{ time ./tmp.sh ;} &>log.tmp  

或者在子 shell 中运行:

( time ./tmp.sh ) &>log.tmp

例子:

$ { time sleep 1 ;} 2>time.log
$ cat time.log 

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


$ ( time sleep 1 ) 2>time.log
$ cat time.log 

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

相关内容