3>&2와 3<&2를 비교하시겠습니까?

3>&2와 3<&2를 비교하시겠습니까?

리디렉션 3>&2와 3<&2가 다른가요?

차이점이 뭐야?

23>&2에서 입력이 열리지 않았기 때문에 오류가 발생해야 한다는 것인가요 ?

비교하다:

{ seq 20 1<&2; } 2>/dev/null

{ seq 20 1>&2; } 2>/dev/null

편집 : 답변

두 명령 모두 1과 2의 동일한 반복을 수행합니다. 출력:

$ strace -f -e trace=dup,dup2 -o o2 sh -c 'seq 20 1>&2'

두 명령은 동일합니다(PID 번호 제외).

답변1

dup2(2, 3)아니요, 둘은 완전히 동일 합니다 . 쉘은 결국 3>&23<&2. 그런 다음 fd는 3결국 동일한 것을 가리키게 됩니다.파일 설명 열기fd2와 동일합니다. 모드/방향에는 영향을 미치지 않습니다.파일 설명 열기. 열린 파일 설명의 모드/방향을 변경할 수 없습니다.

x>&y및 연산자는 x<&y생략된 경우에만 다릅니다. (동일)이지만 (동일)입니다.x>&y1>&y1<&y<&y0<&y0>&y

답변2

하나는 출력을 얻기 위해 stderr을 리디렉션하고, 다른 하나는 입력을 얻기 위해 stderr을 리디렉션합니다.

읽기 및 쓰기를 위해 stderr을 열려면 다음을 사용할 수 있습니다.

2<>/dev/null

로그인한 경우 세 개의 파일 설명자가 모두 읽고 쓰기 위해 열립니다.

dup()먼저 tty를 연 다음 두 번 호출하면 됩니다 .

주문하다

{ seq 20 1<&2; } 2>/dev/null

그리고

{ seq 20 1>&2; } 2>/dev/null

최종 리디렉션에서 쓸 수 있는 파일 설명자를 생성하므로 동일합니다.

전화하는 경우:

{ truss -o o seq 20 1<&2; } 2>/dev/null

쓰기 호출이 seq성공한 것을 볼 수 있습니다. btw: 출력은 seq/dev/null로 이동합니다.

관련 정보