시차 명령의 출력을 파일에 쓸 수 있나요?

시차 명령의 출력을 파일에 쓸 수 있나요?

시차 명령의 출력을 파일에 쓸 수 있나요?

예를 들어 다음과 같이 시도했습니다.

$ time foo.sh > bar.txt

그러나 foo.sh의 출력만 bar.txt로 공급됩니다.

답변1

많은 셸에서 include kshzsh는 시간 파이프에 사용되는 키워드입니다 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

timePOSIX 는 동작이 키워드인지 내장인지(파이프라인 타이밍인지 단일 명령인지) 지정하지 않습니다 . 따라서 이식성을 위해( 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

timeBash의 내장 함수를 사용하는 경우에는 다르게 작성해야 합니다.

(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

관련 정보