heredocs가 파일 설명자에 "의존"하는 이유는 무엇입니까?

heredocs가 파일 설명자에 "의존"하는 이유는 무엇입니까?

나는 특정 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를 쓰라고 지시합니다.

노트:

  1. Heredoc 계층 구조는 관련 파일 설명자 수와 무관합니다.
  2. 0에서 멀리 떨어져 있는 좋은 숫자이기 때문에 숫자 5를 부여했습니다. AFAIK, 50, 500, 50,000을 줄 수 있으며 같은 방식으로 작동합니다.

관련 정보