STDERR을 / dev / null로 리디렉션하는 이유는 무엇입니까? 않습니다. wibble > /dev/null 2>&1 나는 이것이 다음과

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

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?



답변

리디렉션은 왼쪽에서 오른쪽으로 처리됩니다. 당신이 할 경우

2>&1 1> /dev/null

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

그런 다음 stdout비트 버킷으로 리디렉션됩니다. stdout리디렉션은 이전에 영향을주지 않습니다 stderr리디렉션. stderr여전히 당신의 tty를 참조하십시오.

그래서:

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

터미널에 오류 메시지 만 인쇄합니다.

bash재 문서 페이지가 명시 적으로 언급 :

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

          ls > dirlist 2>&1

명령을 실행하는 동안 표준 출력과 표준 오류를 파일 디렉토리로 보냅니다.

          ls 2>&1 > dirlist

표준 출력이 dirlist로 리디렉션되기 전에 표준 오류가 표준 출력에서 ​​복제 되었기 때문에 표준 출력 만 파일 dirlist로 보냅니다 .


답변