출력이 stdout인지 stderr인지 확인


22

출력중인 프로세스가 stdout인지 stderr인지 어떻게 알 수 있습니까?

답변:


22

프로그램이 STDOUT에 출력 할 항목과 STDERR에 무엇을 출력할지 결정하는 방법은 세 가지뿐입니다.

  1. 설명서를 읽으십시오. 또는

  2. 리디렉션 실험 †

  3. STDERR을 빨간색으로 인쇄

† 예 :

program > program.stdout 2> program.stderr

그런 다음 두 개의 출력 파일을보고 프로그램이 STDOUT에 쓴 내용과 STDERR에 쓴 내용을보십시오.

리디렉션하는 대신 tee화면과 파일로 계속 출력하려면 출력이 필요한 경우 파이프로 연결할 수 있습니다 . 참조 /programming//q/692000/477035를


15
일반적으로 옵션 3의 변형을 사용합니다 program | grep .. STDOUT을 빨간색으로 인쇄합니다.
Dennis

빨간색으로 인쇄하는 것은 내가 찾던 것과 거의 똑같습니다. 감사합니다 RedGrittyBrick & Dennis
Rauffle

7

귀하의 의견 요청에 따라 :

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
인상적입니다. 그러나 체리를 당신의 나무에 추가하고 그것이 무엇을하고 있는지 설명해 주시겠습니까? 여기에있는 모든 사람이 전문가 인 것은 아닙니다. 여러분의 구성은 상당히 복잡합니다.)
Izzy

브래킷은 주문 용입니다. 사실에서 정확한 형태 나 - 잊지-곳 얻었으나, 포인트는 별도의 파일 디스크립터를 사용하는 것입니다 (1 이상 = stdout2 = stderr) 브래킷의 내부 세트의 출력을하고, 실행 stdout하나 개를 통해 sed동시에 명령 stderr을 통해 간다 다른 것.
zebediah49

와. 추가 디스크립터를 사용할 줄 몰랐습니다. 먼저 나는 약간 혼란 스러웠습니다 (내가 무엇을하는지 이해하고 곱슬 중괄호와 약간 혼동했습니다). 그러나 이제는 명확합니다. 그리고 OPHO가 정확히 원하는 것을 IMHO하십시오. 그래서 +1 :)
Izzy

이것은 나를 도왔다. stderr에 더 많은 데이터를 추가하고 싶었습니다. 이렇게하면 stdout / stderr에서 모든 것이 올바르게 출력됩니다. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery

0

stderr을 파일로 리디렉션 할 수 있으며 파일에 표시되면 stderr에서 가져온 것입니다.

예 : ls -a 2> ls-all.txt

어떤 이유로 든 stderr로 전송 된 오류가 있으면이 파일로 경로 재 지정됩니다.


-1

이 작업을 한 번 해제하려면 그 중 하나를 다른 곳으로 리디렉션하십시오.

예를 들어로 표준을 리디렉션합니다 >.

ls -al> ls-l.txt (여기서 출력은 stdout이 아니며 stderr 출력이어야 함)

stderr 리디렉션 사용 2>


이 프로세스는 일정한 출력 스트림을 생성하고 일부는 stderout에 출력합니다. 이 출력이 화면에 어떤 것인지 결정하고 싶습니다
Rauffle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.