스크립트가 있습니다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
또는 서브셸에서 실행합니다.
( 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