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>txt
txt 파일을 fd/x로 열기 fd/11을 fd/x로 리디렉션(fd/x의 숫자를 fd/11로 복사)11<&1
fd/11을 fd/1로 리디렉션합니다(fd/1에서 fd/11로 번호 복사).
fd/11은 이제 fd/1(터미널)과 동일합니다. fd/x는 파일을 가리킵니다(그러나 우리는 x를 모릅니다).
echo "Hello" 11>txt 1>&11
- 표준 출력 -> 터미널
11>txt
txt 파일을 fd/x로 열기 fd/11을 fd/x로 리디렉션(fd/x의 숫자를 fd/11로 복사)1>&11
1을 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