시차 명령의 출력을 파일에 쓸 수 있나요?
예를 들어 다음과 같이 시도했습니다.
$ time foo.sh > bar.txt
그러나 foo.sh의 출력만 bar.txt로 공급됩니다.
답변1
많은 셸에서 include ksh
및 zsh
는 시간 파이프에 사용되는 키워드입니다 bash
.time
time foo | bar
foo
및 명령의 시간을 측정 합니다 bar
( zsh
실패 조건이 표시됨). 쉘의 stderr에 이를 보고합니다.
time foo.sh > bar.txt
bar.txt
시작하고 실행하는 데 걸리는 시간을 알려줄 것입니다 foo.sh
.
출력을 리디렉션하려면 다음과 같이 time
시작 컨텍스트에서 리디렉션해야 합니다 stderr
.time
{ time foo.sh; } 2> bar.txt
이것:
2> bar.txt time foo.sh
도 작동하지만 ksh93
및 을 사용하면 bash
첫 번째 위치가 아니기 때문에 time
키워드로 인식되지 않으므로time
주문하다대신 사용하십시오(다른 출력 형식을 발견할 수 있으며 파이프라인 시간을 측정하지 않습니다).
foo.sh
리디렉션 시간의 출력과 대상의 오류 모두에 유의하세요 bar.txt
. 시간 출력만 원하는 경우 다음이 필요합니다.
{ time foo.sh 2>&3 3>&-; } 3>&2 2> bar.txt
time
POSIX 는 동작이 키워드인지 내장인지(파이프라인 타이밍인지 단일 명령인지) 지정하지 않습니다 . 따라서 이식성을 위해( sh
스크립트에서 사용하고 다른 Unix 계열 시스템으로 이식하려는 경우) 아마도 다음과 같이 작성해야 합니다.
command time -p foo.sh 2> bar.txt
foo.sh
다음과 같이 별도의 셸을 실행하지 않는 한 함수, 내장 또는 파이프에 대한 오류 시간을 측정하거나 개별적으로 리디렉션할 수 없습니다.
command time -p sh -c 'f() { blah; }; f | cat'
하지만 이는 시간에 추가 시작 시간도 포함된다는 의미입니다 sh
.
답변2
모든 버전의 시간이 -o 및 --output 매개변수를 지원하는 것은 아닙니다.
다음과 같이 명령을 실행해야 합니다.
(time script.sh) 1> /dev/null 2> /tmp/logFile
그러면 script.sh의 출력이 /dev/null에 저장되고 결과는 /tmp/logFile에 저장됩니다.
STDERR과 STDOUT을 모두 로그 파일에 저장하려면 다음과 같이 실행할 수 있습니다.
(time script.sh) &> /tmp/logFile
답변3
/usr/bin/time
로 출력되므로 stderr
리디렉션해야 합니다.
/usr/bin/time foo.sh 2>bar.txt
time
Bash의 내장 함수를 사용하는 경우에는 다르게 작성해야 합니다.
(time ls) 2>bar.txt
또는 GNU는 매개변수를 time
지원합니다 --output
:
/usr/bin/time --output bar.txt foo.sh
답변4
출력 및 출력을 파일로 얻으려면 다음을 수행하십시오 ls
.time
(time ls) &> log
time
파일의 출력만 얻으려면 다음을 수행하십시오.
(time ls) 2> log