왜 2>&1(stderr를 stdout으로 리디렉션)과 <&- >&- 2>&-(stdin, stdout, stderr 닫기)인가요?

왜 2>&1(stderr를 stdout으로 리디렉션)과 <&- >&- 2>&-(stdin, stdout, stderr 닫기)인가요?

누군가 왜 이런 짓을 하겠는가?

(exec <&- >&- 2>&-; gzip somefile.txt) 2>&1 &

<&- >&- 2>&- "...각각 stdin, stdout 및 stderr을 닫는 것을 의미합니다.."

그런데 "2>&1"이 닫혀 있으면 왜 이렇게 할까요?

답변1

표준 파일 설명자가 열려 있어야 하므로 언급된 문이 올바르지 않습니다.

POSIX 사양: C.2.7 리디렉션

응용 프로그램은 파일 설명자가 읽기용으로 열리지 않거나 파일 설명자가 쓰기용으로 열려 있지 않은 유틸리티나 응용 프로그램을 실행하기 위해 [n]<&-또는 연산자를 사용해서는 안 됩니다 . 이로 인해 실행된 프로그램(또는 내장 셸) 동작이 부적절해질 수 있습니다. 이러한 파일 설명자를 실행 중인 유틸리티나 애플리케이션에 전달하지 않으려면 애플리케이션은 이를 닫을 뿐만 아니라 일부 구현에서 그렇게 할 수 있지만 애플리케이션이 이에 의존해서는 안 되는 경우 자동으로 다시 열어야 합니다.[n]>&-012/dev/null

지시어는 오히려

gzip somefile.txt >/dev/null 2>&1 &

답변2

그들이 한 일을 할 이유가 없었습니다. 2>&1이 예에서는 실제로 완전히 중복됩니다.

관련 정보