대칭 리디렉션은 동일한 결과를 생성하지 않습니다.

대칭 리디렉션은 동일한 결과를 생성하지 않습니다.

Bash 리디렉션을 이해하려고 노력 중인데 이상한 예를 발견했습니다. 다음 상호 작용을 고려하십시오.

1: $ echo "Hello" 11>txt 11<&1
2: Hello
3: $ cat txt
4: $ echo "Hello" 11>txt 1>&11
5: $ cat txt
6: Hello

제 눈에는 1행과 4행이 완전히 대칭으로 보이는데 왜 동일한 결과가 나오지 않습니까?

답변1

@choroba는 훌륭한 답변을 제공했지만 설명은 없었습니다. 그렇기 때문에.

echo "Hello" 11>txt 11<&1

  • 표준 출력 -> 터미널
  • 11>txttxt 파일을 fd/x로 열기 fd/11을 fd/x로 리디렉션(fd/x의 숫자를 fd/11로 복사)
  • 11<&1fd/11을 fd/1로 리디렉션합니다(fd/1에서 fd/11로 번호 복사).

fd/11은 이제 fd/1(터미널)과 동일합니다. fd/x는 파일을 가리킵니다(그러나 우리는 x를 모릅니다).

  • echo "Hello" 11>txt 1>&11
  • 표준 출력 -> 터미널
  • 11>txttxt 파일을 fd/x로 열기 fd/11을 fd/x로 리디렉션(fd/x의 숫자를 fd/11로 복사)
  • 1>&111을 11로 리디렉션합니다(fd/11의 번호를 fd/1로 복사).

이제 fd/1, fd/11 및 fd/x는 파일을 가리킵니다.

답변2

첫 번째 경우에는 fd11을 txt로 지정하고 fd11을 fd1을 가리키도록 변경하면 출력이 터미널로 이동합니다.

두 번째 경우에는 fd11을 txt로 지정한 다음 stdout을 변경하여 이를 가리키도록 하면 출력이 해당 파일로 이동합니다.

<&설명자를 바꾸는 경우 연산자를 사용하여 동일한 동작을 달성할 수 있습니다.

echo Hello 11>txt 1<&11

관련 정보