다른 명령에 대한 파이프를 사용하여 stderr를 stdout으로 보내는 방법은 무엇입니까?

다른 명령에 대한 파이프를 사용하여 stderr를 stdout으로 보내는 방법은 무엇입니까?

빌드 작업의 모든 출력을 캡처하여 에 보내려고 합니다 myprogram. 일부만 캡처할 수 없는 것 같습니다. 이것이 내가 시도하는 것입니다:

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" | myprogram &2 > 1

나는 또한 다음을 시도했습니다.

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" &2 > 1 | myprogram

stdout기본적으로 나는 모든 것을 보내고 그것으로 뭔가를 하고 싶습니다 . 현재는 출력의 일부만 캡처하고 나머지 부분은 화면에 표시됩니다. 모든 것을 다른 프로그램으로 어떻게 전송합니까?

답변1

두 가지 명령이 있으므로 다음을 사용하는 것이 좋습니다.

{ make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64"; } 2>&1 | myprogram

또는

( make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" ) 2>&1 | myprogram

출력이 파이프로 전달 되지 않는 경우 쉘이 두 호출의 출력을 하나로 리디렉션 make clean하도록 위의 두 가지 중 하나를 사용해야 합니다 .make

답변2

모든 명령의 STDERR을 STDOUT으로 리디렉션해야 합니다. 그런 다음 모든 것을 으로 전송할 수 있습니다 myprogram.

( make clean 2>&1 && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" 2>&1 ) | myprogram

답변3

(make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64") 2>&1 | myprogram

답변4

myprogram의 복잡성에 따라 make 작업을 myprogram에 전달하여 stdout과 stderr을 별도의 스트림으로 읽을 수도 있습니다.

내 프로그램이 얼마나 복잡해지기를 원하는지에 따라 다릅니다.

가장 큰 장점은 stdout과 stderr을 함께 묶지 않고 독립적으로 처리할 수 있다는 것입니다.

관련 정보