코드 조각이 있고 매우 자세한 모드에서 실행된다고 가정해 보겠습니다. 이 가장 긴 콘텐츠는 내가 모든 일이 어떻게 진행되었는지 알아보기 위해 읽고 싶었던 메시지를 배반합니다. 그러나 터미널은 다른 콘텐츠로 가득 차 있습니다.
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내가 줄 수 있는 것보다 더 나은 설명을 얻으려면.