시간 명령의 출력을 리디렉션하려고했지만 다음과 같이 할 수 없습니다.
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
파일에서 나는 ls
명령 의 출력을 볼 수 있지만 time
. 내가 할 수 없었던 이유와 방법을 설명해주십시오.
시간 명령의 출력을 리디렉션하려고했지만 다음과 같이 할 수 없습니다.
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
파일에서 나는 ls
명령 의 출력을 볼 수 있지만 time
. 내가 할 수 없었던 이유와 방법을 설명해주십시오.
답변:
다음을 사용하여 시간 출력을 리디렉션 할 수 있습니다.
(time ls) &> file
중괄호를 사용할 수 있도록 단일 명령으로 (time ls)를 가져와야하기 때문입니다.
&>
제발 에 대한 설명, 이것에 대해 어디서 배울 수 있습니까?
&>file
는 >file 2>&1
. stdout과 stderr을 모두 지시합니다.
하위 셸을 시작할 필요가 없습니다. 코드 블록을 사용하는 것도 좋습니다.
{ time ls; } 2> out.txt
또는
{ time ls > /dev/null 2>&1 ; } 2> out.txt
2>
제발 에 대한 설명 . 이것에 대해 어디서 배울 수 있습니까?
명령 시간은 출력을 STDERR (STDOUT 대신)로 보냅니다. 이는 정상적으로 시간과 함께 실행 된 명령 (이 경우 ls)이 STDOUT에 출력되기 때문입니다.
시간 출력을 캡처하려면 다음을 입력하십시오.
(time ls) 2> filename
그것은 시간의 출력만을 포착하지만 ls의 출력은 콘솔에 정상이됩니다. 둘 다 하나의 파일에 캡처하려면 다음을 입력하십시오.
(time ls) &> filename
2>는 STDERR을 리디렉션하고 &>는 둘 다 리디렉션합니다.
시간은 쉘 내장이며 리디렉션 방법이 있는지 확실하지 않습니다. 그러나 /usr/bin/time
출력 리디렉션을 확실히 허용하는 대신 사용할 수 있습니다
.
bash time mycmd 2>file
. 또는 /usr/bin/time
언급 된대로 전화하십시오 .
리디렉션이 작동하지 않는 것처럼 보이는 이유 time
는 파이프 라인 앞에서 사용될 때 bash 예약어 (내장 아님!)이기 때문입니다. bash (1) :
시간 예약어가 파이프 라인 앞에 있으면 파이프 라인이 종료 될 때 실행에 소비 된 사용자 및 시스템 시간과 함께 경과 된 시간이보고됩니다.
따라서의 출력을 리디렉션 time
하려면 중괄호를 사용하십시오.
{ time ls; } 2> filename
또는 전화 /usr/bin/time
:
/usr/bin/time ls 2> filename