我有一个脚本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