"time command"에서 명령의 출력을 리디렉션합니다.

"time command"에서 명령의 출력을 리디렉션합니다.

나는 다음을 사용하여 시간을 측정하려고합니다.

/usr/bin/time myCommand

그러나 /usr/bin/timestderr에 쓴 이후,내 주문또한 stderr에 기록하면 스트림의 시간 출력 이상의 결과를 얻을 수 있습니다. 내가 원하는 것은 myCommand의 모든 출력을 다음으로 리디렉션 /dev/null하지만 여전히 stderr에 시간 출력을 쓰는 것입니다. 사용예내 주문stderr of 에 쓰면 ls /nofile아래와 같이 출력이 전혀 표시되지 않습니다.

$ /usr/bin/time ls /nofile 2> /dev/null
$

리디렉션 없이 출력(stderr로) ls과 시간(또한 stderr로)의 출력을 볼 수 있습니다.

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

내가 원하는 것은 단순히 다음을 생산하는 것입니다.

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

어떤 아이디어가 있나요?

답변1

ksh, bash 및 zsh에서 time이는 내장 키워드가 아닌 키워드입니다. 동일한 라인의 리디렉션은 시간이 측정되는 명령에만 적용되며 자체 출력에는 적용되지 않습니다 time.

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

이러한 셸에서 자체 출력을 리디렉션하려면 time추가 수준의 그룹화를 사용해야 합니다.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

독립형 GNU 버전을 사용하는 경우time선택적으로 stderr 이외의 위치 -o에 출력을 쓰는 유틸리티입니다 . 터미널에 쓸 time수 있습니다 :time

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

출력을 표준 오류로 유지하려면 time추가 수준의 파일 설명자 섞기가 필요합니다.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

어떤 time유틸리티를 사용하든 중간 쉘을 호출하여 필요한 리디렉션을 수행할 수 있습니다. 추가 작업(예: 리디렉션 등)을 수행하기 위해 중간 쉘을 호출하는 것은 매우 일반적입니다 cd. 이는 쉘이 수행하도록 설계된 작은 작업입니다.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

답변2

[artur@asus-ux21e ~]$ find /etc/pki/CA/private/
/etc/pki/CA/private/
find: ‘/etc/pki/CA/private/’: Permission denied
[artur@asus-ux21e ~]$ time (find /etc/pki/CA/private/ &> /dev/null)

real    0m0.006s
user    0m0.001s
sys 0m0.004s

관련 정보