"time"명령의 출력을 어떻게 리디렉션 할 수 있습니까?


95

시간 명령의 출력을 리디렉션하려고했지만 다음과 같이 할 수 없습니다.

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

파일에서 나는 ls명령 의 출력을 볼 수 있지만 time. 내가 할 수 없었던 이유와 방법을 설명해주십시오.


1
수퍼 유저에 있어야한다고 생각합니다.
Mnementh

1
이 질문에 대한 답변은 프로그래머뿐만 아니라 다른 고급 사용자에게도 관심이 있습니다. superuser.com
Mnementh

답변:


104

다음을 사용하여 시간 출력을 리디렉션 할 수 있습니다.

(time ls) &> file

중괄호를 사용할 수 있도록 단일 명령으로 (time ls)를 가져와야하기 때문입니다.


1
그래 괜찮아요.하지만 질문은 그들이 어떻게했는지입니다.
abubacker 2010 년

2
time 명령은 인수를 명령으로 사용합니다. 그러나 괄호는이를 하나의 명령으로 그룹화합니다. 예 : time ls> file1.txt 인수에서 0 = 시간 1 = "ls> file1.txt"
sganesh

8
그리고 time 명령은 출력을 stderr로 인쇄합니다. 그래서 당신은 사용할 수 있습니다 (time ls) 2> file
sganesh

5
&>제발 에 대한 설명, 이것에 대해 어디서 배울 수 있습니까?
hello_there_andy

3
@hello_there_andy &>file>file 2>&1. stdout과 stderr을 모두 지시합니다.
ktbiz

129

하위 셸을 시작할 필요가 없습니다. 코드 블록을 사용하는 것도 좋습니다.

{ time ls; } 2> out.txt

또는

{ time ls > /dev/null 2>&1 ; } 2> out.txt

1
동의합니다. 베스트 답변입니다. ls 결과를 버리고 시간을 얻을 수있는 옵션을 제공합니다. ghostdog74 감사합니다
rd42

1
이것은 "hostent"명령의 출력을 리디렉션 할 수없는 경우 AIX에서 작동했습니다. 감사합니다!
Hugo

1
2>제발 에 대한 설명 . 이것에 대해 어디서 배울 수 있습니까?
hello_there_andy

3
>와 2>를 동시에 원하는 경우 어떻게해야합니까?
Jorge Fernández

25

명령 시간은 출력을 STDERR (STDOUT 대신)로 보냅니다. 이는 정상적으로 시간과 함께 실행 된 명령 (이 경우 ls)이 STDOUT에 출력되기 때문입니다.

시간 출력을 캡처하려면 다음을 입력하십시오.

(time ls) 2> filename

그것은 시간의 출력만을 포착하지만 ls의 출력은 콘솔에 정상이됩니다. 둘 다 하나의 파일에 캡처하려면 다음을 입력하십시오.

(time ls) &> filename

2>는 STDERR을 리디렉션하고 &>는 둘 다 리디렉션합니다.


1
이 답변은 실제로 OP의 리디렉션이 작동하지 않는 이유 에 대한 답변이며 OP가 묻는 질문 중 하나였습니다. 아무도 이것을 다루지 않습니다.
NeutronStar

이것으로 어떻게 한 파이프가 다른 프로세스로 연결 될까요?
Paul

10

시간은 쉘 내장이며 리디렉션 방법이 있는지 확실하지 않습니다. 그러나 /usr/bin/time출력 리디렉션을 확실히 허용하는 대신 사용할 수 있습니다 .


/ usr / bin / time --output filename ls
chub

4
내장 시간은 출력 리디렉션과 잘 작동합니다. STDOUT이 아닌 STDERR에서만 출력됩니다.
Mnementh

문제는 내장 명령이 서브 쉘이 아닌 쉘 환경 자체에서 실행된다는 것입니다. 쉘의 stderr는 일반적으로 터미널에 연결되어 있으므로 리디렉션은 아무 작업도 수행하지 않습니다. 기본 제공 시간을 리디렉션하려면 bash time mycmd 2>file. 또는 /usr/bin/time언급 된대로 전화하십시오 .
ktbiz

전체 경로를 지정하지 않고 비 내장을 사용할 수도 있습니다. stackoverflow.com/questions/29540540/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

4

출력 time과 명령 을 혼합하지 않으려는 경우 . GNU 시간을 사용 -o file하면 다음과 같이 사용할 수 있습니다 .

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

하면서 tim시간의 출력, outerr발 표준 출력과 표준 에러이다 grep.


4

리디렉션이 작동하지 않는 것처럼 보이는 이유 time는 파이프 라인 앞에서 사용될 때 bash 예약어 (내장 아님!)이기 때문입니다. bash (1) :

시간 예약어가 파이프 라인 앞에 있으면 파이프 라인이 종료 될 때 실행에 소비 된 사용자 및 시스템 시간과 함께 경과 된 시간이보고됩니다.

따라서의 출력을 리디렉션 time하려면 중괄호를 사용하십시오.

{ time ls; } 2> filename

또는 전화 /usr/bin/time:

/usr/bin/time ls 2> filename

0

테스트를 위해 중괄호와 함께 stdout 및 stderr 메서드의 리디렉션을 사용합니다.
&>>rpt이 대표 >>rpt 2>&1짧다.
중괄호는 현재 쉘에서 명령을 실행합니다. 참조 : 남자 배쉬

{ time ls a*; } &>>rpt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.