터미널 및 Grepping Stderr: 다른 내용을 변경하지 않고 stderr에 대한 자세한 코드 및 grep을 실행하는 방법은 무엇입니까?

터미널 및 Grepping Stderr: 다른 내용을 변경하지 않고 stderr에 대한 자세한 코드 및 grep을 실행하는 방법은 무엇입니까?

코드 조각이 있고 매우 자세한 모드에서 실행된다고 가정해 보겠습니다. 이 가장 긴 콘텐츠는 내가 모든 일이 어떻게 진행되었는지 알아보기 위해 읽고 싶었던 메시지를 배반합니다. 그러나 터미널은 다른 콘텐츠로 가득 차 있습니다.

stderror 파이프를 stdout 파이프로 변환하지 않고 grep 필터 stderror 출력을 수행하는 방법이 있습니까?

예를 들어,

my-command 2>&1 | grep something # ok, great; is it possible without the pipe shift?

가능합니까?

i.e., maybe
my-command 2>(grep something)?

답변1

나는 이 두 가지 옵션을 답변으로 포함하고 있습니다. 비록 질문에 실제로 답변하지 않더라도(대답은 "in bash, no"입니다), 다른 사람이 이것을 볼 경우를 대비하여 stdout과 stderr를 교환하는 방법을 보여주기 위해, 형식이 올바른지 확인하세요(설명과 다름).

답변 1: 이것이 실행하려는 프로그램이라고 가정합니다(명령처럼 보이지는 않지만 명령인 척합니다.모두여기에는 실제로 실행하려는 명령과 매개변수가 포함되어 있습니다):

{ echo stdout; echo stderr >&2; }

이제 stderr를 grep하여 어떤 항목에 대해 stdout을 변경하지 않고 그대로 두고 싶다고 가정해 보겠습니다.

{ echo stdout; echo stderr >&2; } 2> >(grep something)

그렇다면모두그렇게 하면 모든 표준 출력과 일부 내용이 포함된 표준 오류의 일부가 모두 분산됩니다. 나중에 볼 수 있도록 stdout 및 stderr을 별도의 파일에 작성할 수 있습니다.

{ echo stdout; echo stderr >&2; } 2> >(grep something > errorfile) > outputfile

stdout과 stderr을 교환하는 방법(및 이를 수행하려는 이유)은 다음을 참조하세요.https://stackoverflow.com/questions/13299317/io-redirection-swapping-stdout-and-stderr내가 줄 수 있는 것보다 더 나은 설명을 얻으려면.

관련 정보