나는 이런 명령을 이해하려고 노력하고 있습니다
[command] > /dev/null 2>&1
내가 올바르게 이해했다면 명령의 출력은 (파일 설명자 2) 로 리디렉션 /dev/null
된 다음 (파일 설명자 1) 로 리디렉션됩니다.stderr
stdout
최종 결과는 [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
로 리디렉션하고 있습니다 .stdout
Hello 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
. 따라서 모든 출력이 삭제됩니다.
바라보다쉘의 제어 및 리디렉션 연산자는 무엇입니까?더 알아보기.