표준 출력 및 표준 오류 리디렉션

표준 출력 및 표준 오류 리디렉션

나는 파일 설명자 간의 관계를 알아 내려고 노력해 왔습니다. 내가 이해하지 못하는 한 가지는 다음과 같습니다.

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)가 대상을 가리킵니다.stdoutfilename

즉, stdoutstderr둘 다 다음으로 리디렉션됩니다.filename

2>&1>파일 이름

여기에서 stderr( fd 2)는 대상을 가리킨 stdout다음 stdout( fd 1)은 다음으로 리디렉션됩니다.filename.

이는 stderr리디렉션할 원래 대상이 로 리디렉션 stdout되고 있음 을 의미합니다 .stdoutfilename

즉, 각 파일 설명자가 서로 독립적이기 때문에 리디렉션 순서가 중요합니다.

추가 정보

자세한 내용은 다음과 같은 다른 질문과 답변을 확인하세요.

답변2

그렇지 않습니다.

a>&b는 fd a를 fd b로 리디렉션합니다. a가 제공되지 않으면 1로 가정됩니다. 1은 표준 출력이고 2는 표준 오류입니다.

일부 쉘(예: Bash)에서는 &> 파일을 지정하여 두 가지를 모두 리디렉션할 수도 있습니다. 그러나 >2>&1이 더 이식성이 뛰어납니다.

관련 정보