티를 사용하여 STDERR 및 STDOUT을 파일로 캡처


16

나는 최선의 순서가 캡처 모두 무엇인지 불분명 해요 STDERRSTDOUT사용하여 동일한 파일에 tee. 파일로 파이프하려면 경로 재 지정 후 파일 핸들을 매핑해야한다는 것을 알고 있습니다.

find . >/tmp/output.txt 2>&1

이 보내 쉘 지시 STDOUT/tmp/output.txt다음 보낼 STDERRSTDOUT(지금에 전송된다 /tmp/output.txt).

2>&1파일을 재 지정하기 전에 수행을 시도 하면 원하는 효과가 없습니다.

그러나 파이프를 사용 tee하려면 다음과 같아야합니다.

find . |tee /tmp/output.txt 2>&1   # or
find . 2>&1 |tee /tmp/output.txt   # ?

답변:


19

후자의; 원래 명령의 STDOUT과 STDERR이 동일한 fd로 이동 한 다음이를 티에 함께 공급합니다. 전자의 경우, STDOUT에 참여하는 것은 tee 명령의 STDERR입니다.


5
흥미롭게도 bash 매뉴얼 페이지에 " |&이 명령을 사용 하면 command1의 표준 오류가 파이프를 통해 command2의 표준 입력에 연결됩니다 2>&1 |. 단축 된 것입니다 .이 표준 오류의 암시 적 리디렉션은 명령에서 지정한 모든 리디렉션 후 수행됩니다."
PP.

나는 모두에 기록하는 작은 C 프로그램을 만들어야했습니다 stderrstdout이 문제를 이해합니다. 리디렉션 >과 티 |연산자는 두 출력 스트림을 모두 캡처하려고 할 때 다릅니다. 리디렉션을 위해해야했습니다 ./testapp > /tmp/out.log 2>&1. 티에 대한 반면 나는해야했다 ./testapp 2>&1 | tee /tmp/out.log.
typelogic

가치있는 것에 대해 @daixtr |은 일반적으로 파이프 연산자라고합니다. tee파이프의 맨 끝에서 호출되는 특정 프로그램 만 나타냅니다.
MadHatter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.