STDERR이 이런 방식으로 /dev/null로 리디렉션되는 이유는 무엇입니까?

STDERR이 이런 방식으로 /dev/null로 리디렉션되는 이유는 무엇입니까?

이것은 나에게 이해가 되지 않습니다.

wibble > /dev/null 2>&1

다음과 같다면 더 의미가 있을 것 같아요.

wibble 2>&1 > /dev/null

다시 말해서

Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null

명령 리디렉션 순서의 기본 아이디어는 무엇입니까 xxx > /dev/null 2>1?

답변1

리디렉션은 왼쪽에서 오른쪽으로 처리됩니다. 당신이 그렇게한다면

2>&1 1> /dev/null

첫 번째 리디렉션은 stderr당시 가리키는 스트림(기본적으로 tty)을 가리킵니다. 별칭은 stdout생성되지 않습니다 .stderrstdout

그런 다음 stdoutBitbucket으로 리디렉션합니다. 리디렉션은 stdout이전 리디렉션에 영향을 주지 않습니다 stderr. stderr아직도 tty를 참조하고 있습니다.

그래서:

ls file_that_doesnt_exist 2>&1 1> /dev/null

터미널에 오류 메시지가 인쇄됩니다.

이것bash리디렉션 문서 페이지에는 다음이 명시적으로 언급되어 있습니다.

리디렉션 순서가 중요합니다. 예를 들어 다음 명령은

          ls > dirlist 2>&1

표준 출력 및 표준 오류를 파일의 디렉토리 목록으로 지정하고 명령은

          ls 2>&1 > dirlist

파일의 디렉토리 목록에만 표준 출력을 지정합니다.표준 오류는 디렉토리 목록으로 리디렉션되기 전에 표준 출력에서 ​​복사되기 때문입니다..

관련 정보