-
EOF(End Of File) stdin 활용Linux 2024. 8. 13. 02:32728x90
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
장점
- 인라인 정의: 명령어 내에서 여러 줄의 텍스트를 직접 정의할 수 있어, 임시 파일을 만들 필요 없이 간단히 리소스를 정의하고 적용할 수 있습니다.
- 스크립트 작성 용이: 여러 줄에 걸친 텍스트를 쉽게 포함할 수 있어 스크립트 내에서 편리하게 사용할 수 있습니다.
- 유연성: 텍스트 블록의 끝을 정의하는 키워드는 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