stdout/stderr 및 /dev/null의 혼란스러운 동작

stdout/stderr 및 /dev/null의 혼란스러운 동작

나는 이런 명령을 이해하려고 노력하고 있습니다

[command] > /dev/null 2>&1

내가 올바르게 이해했다면 명령의 출력은 (파일 설명자 2) 로 리디렉션 /dev/null된 다음 (파일 설명자 1) 로 리디렉션됩니다.stderrstdout

최종 결과는 [command]오류만 출력된다는 것 입니다.

이를 이해하기 위해 다음 명령을 실행했습니다.

bash-3.2$ echo "Hello World" 1>&2
Hello World

여기서는 "Hello World"를 에코하고 로 리디렉션합니다 stderr. 이제 다음 명령을 실행합니다.

bash-3.2$ echo "Hello World" 1>&2 2>&1
Hello World

예상대로 stderr로 리디렉션하고 있습니다 .stdoutHello World

이제 나는 이것을 실행한다

bash-3.2$ echo "Hello World" 1>&2 1>&1
Hello World

내가 원하는 것은 출력을 인쇄하는 것입니다 stdout. 그러나 stdout.stderr

그렇다면 왜 인쇄합니까 Hello World? 아무 것도 인쇄되지 않을 것이라고 생각했습니다.

답변1

echo "Hello World" 1>&2 1>&1

파일 설명자 1(표준 출력)을 파일 설명자 2(표준 오류)가 가리키는 곳으로 리디렉션한 다음 파일 설명자 1을 자신에게 리디렉션합니다. 따라서 모든 출력은 표준 오류로 이동하지만 이를 변경하지 않았습니다. 따라서 모든 출력은 현재 터미널로 이동합니다.

아무것도 인쇄하지 않으려면 표준 오류를 리디렉션해야 합니다.

(echo "Hello World" 1>&2 1>&1) 2> /dev/null

또는 동등하게,

echo "Hello World" 2>/dev/null 1>&2

당신의 해석

[command] > /dev/null 2>&1

정확하지 않음: > /dev/null표준 출력을 로 리디렉션 /dev/null한 다음 표준 오류를 현재 가리키는 표준 출력으로 리디렉션합니다 /dev/null. 따라서 모든 출력이 삭제됩니다.

바라보다쉘의 제어 및 리디렉션 연산자는 무엇입니까?더 알아보기.

관련 정보