나는 파일 설명자 간의 관계를 알아 내려고 노력해 왔습니다. 내가 이해하지 못하는 한 가지는 다음과 같습니다.
ls -l /bin/usr > ls-output.txt 2>&1
다음과 다릅니다:
ls -l /bin/usr 2>&1 >ls-output.txt
답변1
리디렉션은 순차적으로 실행되므로 리디렉션 순서가 중요합니다.
>파일 이름 2>&1
stdout
이 예에서는 ( fd 1
)가 대상을 가리킨 filename
다음 stderr
( fd 2
)가 대상을 가리킵니다.stdout
filename
즉, stdout
및 stderr
둘 다 다음으로 리디렉션됩니다.filename
2>&1>파일 이름
여기에서 stderr
( fd 2
)는 대상을 가리킨 stdout
다음 stdout
( fd 1
)은 다음으로 리디렉션됩니다.filename.
이는 stderr
리디렉션할 원래 대상이 로 리디렉션 stdout
되고 있음 을 의미합니다 .stdout
filename
즉, 각 파일 설명자가 서로 독립적이기 때문에 리디렉션 순서가 중요합니다.
추가 정보
자세한 내용은 다음과 같은 다른 질문과 답변을 확인하세요.
답변2
그렇지 않습니다.
a>&b는 fd a를 fd b로 리디렉션합니다. a가 제공되지 않으면 1로 가정됩니다. 1은 표준 출력이고 2는 표준 오류입니다.
일부 쉘(예: Bash)에서는 &> 파일을 지정하여 두 가지를 모두 리디렉션할 수도 있습니다. 그러나 >2>&1이 더 이식성이 뛰어납니다.