ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • EOF(End Of File) stdin 활용
    Linux 2024. 8. 13. 02:32
    728x90

    EOF(End Of File) stdin은 쉘 스크립트에서 입력을 다루는 방법 중 하나로, 주로 명령어 내에서 여러 줄의 텍스트를 인라인으로 전달할 때 사용됩니다.

     

    예를 들어 kubectl apply 명령어를 통해 Kubernetes에 리소스를 정의하고 적용하는 과정에서 EOF stdin을 활용할 수 있습니다.

     

    EOF stdin의 역할

    • EOF(End Of File) stdin은 쉘에서 입력의 끝을 나타내기 위한 기호입니다. 이 기호를 사용하면 명령어에 여러 줄의 텍스트를 직접 포함시킬 수 있습니다. 이 방식은 주로 << 연산자와 함께 사용되며, 텍스트 블록의 끝을 표시하는 데 사용됩니다.

    사용 예시: kubectl apply -f - <<EOF

    위 예제에서는 kubectl apply 명령어에 파일 입력 대신 표준 입력(stdin)을 사용하여 Kubernetes 리소스를 정의하고 적용하고 있습니다. 여기서 <<EOF 구문이 사용됩니다.

    • kubectl apply -f -:
      • -f 옵션은 파일을 지정하여 해당 파일에 정의된 Kubernetes 리소스를 적용하라는 의미입니다.
      • -는 파일 대신 표준 입력(stdin)을 사용하겠다는 의미입니다.
    • <<EOF:
      • << 연산자는 "여기부터 EOF까지 입력을 읽어라"는 의미입니다. EOF는 텍스트 블록의 끝을 표시하는 키워드로, 다른 단어를 사용할 수도 있지만, 관례적으로 EOF를 많이 사용합니다.
    • EOF로 끝나는 텍스트 블록:
      • EOF까지의 모든 텍스트는 kubectl apply -f - 명령어에 의해 표준 입력으로 처리됩니다.
    • 예제: Kubernetes의 VirtualService를 정의하는 YAML 내용을 텍스트로 전달 
    kubectl apply -f - <<EOF
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: helloworld
    spec:
      hosts:
        - helloworld
      http:
      - match:
        - headers:
            cookie:
              regex: "^(.*?;)?(email=[^;]*@some-company-name.com)(;.*)?$"
        route:
        - destination:
            host: helloworld
            subset: v1
          weight: 50
        - destination:
            host: helloworld
            subset: v2
          weight: 50
      - route:
        - destination:
            host: helloworld
            subset: v1
    EOF

    장점

    1. 인라인 정의: 명령어 내에서 여러 줄의 텍스트를 직접 정의할 수 있어, 임시 파일을 만들 필요 없이 간단히 리소스를 정의하고 적용할 수 있습니다.
    2. 스크립트 작성 용이: 여러 줄에 걸친 텍스트를 쉽게 포함할 수 있어 스크립트 내에서 편리하게 사용할 수 있습니다.
    3. 유연성: 텍스트 블록의 끝을 정의하는 키워드는 EOF 외에도 사용자가 원하는 키워드를 사용할 수 있어 유연하게 사용할 수 있습니다.

     

    사용 예제

    1. EOF 외의 다른 문자열을 종료 문자로 사용하기

    cat <<END
    Hello world
    This is my EOF
    END

     

    2. 다른 명령어와 조합해서 사용하기 

    • cat에 stdin으로 문자열을 전달
    • '>'을 이용해 출력을 redirection해서 hello.txt 파일로 저장
    cat <<END > hello.txt
    Hello world
    This is my EOF
    END
    728x90

    'Linux' 카테고리의 다른 글

    curl 명령어의 아규먼트  (0) 2025.03.11
    TLS 서버 이름 표시의 작동 방식인 SNI란?  (0) 2025.03.10
Designed by Tistory.