STDERR을 / dev / null로 리디렉션하는 이유는 무엇입니까?


28

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

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?


6
이 설명이 유용 할 수도 있습니다 .
rozcietrzewiacz

실제로 내 질문을 정확하게 설명하는 @rozcietzewiacz에게 감사드립니다
whoami

1
그 페이지 의 중간 에 Greg 's Wiki에 대한 훌륭한 구절 이 있습니다. 아직. 걱정하지 마십시오. 이는 매우 일반적인 오해이며 혼자가 아닙니다. … 많은 사람들은 2>&1어떻게 든 두 FD를“통합”하거나“함께 묶어”또는“결혼”하여 그들 중 하나에 대한 [후속] 변경이 다른 하나에 대한 변경이 될 것이라고 생각합니다. 그렇지 않습니다.”
G-Man은 'Reinstate Monica'라고 말합니다

답변:


40

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

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로 보냅니다 .


3
야이는 내 수수께끼를 해결합니다. 나는 여전히 논리적으로 혼란스럽게 생각합니다. 하지만 난 재미 같은 페이지의 다른 부분은 발견 &>/dev/null에 대한 의미와 동일/dev/null 2>&1
whoami를

1
이야기하는 페이지가 Bash Reference Manual의 일부임을 강조해야합니다 . 분명히 bash 에 대해 설명 합니다. 이 bash는 다른 세계에서 다른 쉘,이고, &>>&(문맥에서 사용하지 않는 경우 2>&1>&2, 등) bash는-ISMS하고 아닌 표준 . 이식성이 뛰어난 쉘 스크립트에는 사용하지 않아야합니다.
G-남자 '는 분석 재개 모니카'말한다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.