stderr를 stdout으로 영구적으로 리디렉션

stderr를 stdout으로 영구적으로 리디렉션

많은 명령이 포함된 bash 스크립트가 있는데 그 중 일부는 오류 메시지를 생성할 수 있습니다. 종종 오류 메시지와 출력 메시지가 잘못된 순서로 혼합되어 있습니다(예를 들어, 명령 #2의 출력을 본 다음 명령 #1의 오류 메시지를 봅니다).

내가 이해하는 바에 따르면, 그 이유는 이러한 명령이 두 개의 출력 스트림(stdout 및 stderr)을 사용하고 각각 비동기적으로 콘솔에 인쇄되기 때문입니다. 따라서 한 가지 해결책은 각 명령 뒤에 "2>&1"을 추가하여 stderr를 stdout으로 리디렉션하는 것입니다.

하지만 명령이 많기 때문에 모두 한 번 실행하는 것이 좋습니다. 모든 출력이 올바른 순서로 표시되도록 모든 명령의 모든 오류 메시지가 stdout으로 리디렉션되도록 스크립트 시작 부분에 넣을 수 있는 명령이 있습니까?

답변1

나는 그렇지 않지만상당히표준 출력 및 오류 스트림이 두 개 이상의 비동시 명령 사이에서 어떻게 섞일 수 있는지 확인하려면 스크립트 시작 부분에서 단일 명령을 사용하여 두 출력 스트림을 동일한 위치로 리디렉션할 수 있습니다.

exec 2>&1

또는 리디렉션을 통해 스크립트를 시작할 수 있습니다.

./myscript.sh 2>&1

개인적으로 저는 이 "기능"을 더 쉽게 켜거나 끌 수 있는 두 번째 옵션을 선택하겠습니다.

관련 정보