나는 특정 heredoc 구문이 파일 설명자를 처리하는 이유를 새로운 사용자에게 명확히 하기 위해 이 질문과 답변을 게시했습니다. 처음에는 이해하는 데 어려움을 겪었습니다.
예를 참조하세요:
bash << EOF0
command1
<< E0F1
Proudly_Printed_With_Heredoc
EOF1
E0F0
왜 이렇게 되어야 할까요:
bash /dev/fd/5 5<< 'EOF0'
command1
cat << EOF1 >> /etc/apache2/apache2.conf
Proudly_Printed_With_Heredoc
EOF1
EOF0
답변1
첫 번째 예가 누락되어 cat
파일 설명자가 필요하지 않습니다.
bash << EOF0
command1
cat << E0F1
Proudly_Printed_With_Heredoc
EOF1
E0F0
그러나 heredoc에서 입력을 받는 대신 특정 명령과 상호 작용하려면 파일 설명자가 필요합니다.
답변2
이 답변을 이해하려면 "파일 설명자"의 전체 개념을 소개해야 합니다. "파일 설명자"란 무엇이며 왜 필요한지. 이미 그러한 소개가 있는 경우 아래 답변으로 건너뛰십시오. 아니요 - -이 SE 스레드에서 내 답변을 읽고 다시 오십시오..
답변:
질문에서 제가 요청한 두 번째 방법에서는 0(이 경우 5) 대신 Bash의 파일 설명자에 구분된 문서를 전달합니다.
문구의 첫 번째 부분은 bash /dev/fd/5
파일 설명자 5를 입력으로 사용하는 bash를 나타내고 두 번째 부분은 5<< EOF
쉘에 해당 파일 설명자에 here-doc를 쓰라고 지시합니다.
노트:
- Heredoc 계층 구조는 관련 파일 설명자 수와 무관합니다.
- 0에서 멀리 떨어져 있는 좋은 숫자이기 때문에 숫자 5를 부여했습니다. AFAIK, 50, 500, 50,000을 줄 수 있으며 같은 방식으로 작동합니다.