stdout 및 stderr을 파일로 리디렉션하려면 다음을 수행하세요.
curl 'https://example.com' > myfile 2>&1
이것은 잘 작동하지만 왜 stderr를 stdout으로 리디렉션하는 작업이 마지막에 이루어져야 합니까?
왜 그럴 수 없습니까?
curl 'https://example.com' 2>&1 > myfile
이 대안이 작동하지 않는 이유를 이해할 수 없습니다. stderr을 파일로 리디렉션하지 않습니다. 왼쪽에서 오른쪽으로 읽기: "웹 페이지 다운로드, stderr를 stdout으로 리디렉션, stdout을 파일로 리디렉션"이지만 이는 분명히 Bash가 명령을 해석하는 방식이 아닙니다. Bash가 2>&1
마지막에 올 것으로 예상됩니다 . 왜 2>&1
맨 마지막에 넣어야 하는 걸까요 ?
답변1
저를 믿으세요. 저는 오랫동안 이 질문을 받아왔습니다. 이제 나는 그것을 간단한 말로 기억합니다.
여기서의 의미 fd
는 입니다 file descriptor
.
두 번째 경우에는 이전에 있었던 위치를 fd2
가리킵니다 . fd1
그러면 fd2
다른 곳을 가리킬 것입니다.
더 쉽게 이해하려면 다음을 고려하십시오.
fd1 --> stdout
2>&1, means fd2 --> stdout
then >some_file means fd1 --> some_file
따라서 fd2
따라가는 것이 fd1
아니라 목표를 따라가는 것입니다 fd1
.