코드가 있고 매우 자세한 모드로 실행되고 있다고 가정해 보겠습니다. 이 최대 장황함은 모든 것이 어떻게 진행되고 있는지 확인하기 위해 읽고 싶은 메시지를 노출시킵니다. 그러나 터미널에는 다른 콘텐츠가 넘쳐납니다.
stderror 파이프라인을 stdout 파이프라인으로 전환하지 않고 stderror 출력을 grep 필터링하는 방법이 있습니까?
예를 들어,
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의 일부를 모두 산재시켜 얻었을 것입니다. 나중에 볼 수 있도록 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내가 줄 수 있는 것보다 더 나은 설명을 위해.