0 views
1. 개요 및 정의
- Here Document는 유닉스/리눅스 쉘의 리다이렉션 기법 중 하나로, 스크립트 내에서 표준 입력으로 여러 줄의
텍스트를 인라인으로 전달할 때 사용되는 구문이다.
- 일반적으로
<<연산자와 구분자를 사용하여 시작과 끝을 명시한다.
- 일반적으로
2. 동작 원리
2.1 쉘 파싱 및 입력 처리
- 구분자 인식:
- 쉘은
<<연산자를 만나면 그 뒤에 오는 문자열을 종료 구분자로 인식한다. - (예:
<< EOF에서EOF가 구분자이다.)
- 쉘은
- 입력 스트림 대체:
- 쉘은 다음 줄부터 종료 구분자가 나타날 때까지의 모든 라인을 해당 명령의 표준 입력으로 간주하고, 이를
임시 파일처럼 처리하여 명령어(예:
cat,ssh등)에게 전달한다.
- 쉘은 다음 줄부터 종료 구분자가 나타날 때까지의 모든 라인을 해당 명령의 표준 입력으로 간주하고, 이를
임시 파일처럼 처리하여 명령어(예:
- 변수 확장 처리:
- 기본적으로 Here Document 내부의 내용은 변수 확장, 명령 치환 등이 발생한다.
- 예를 들어,
$VARIABLE은 실제 변수 값으로 대체된다.
- 따옴표를 사용한 확장 방지:
- 종료 구분자를 작은따옴표로 감싸면(예:
<< 'EOF'), 쉘은 내부의 변수 확장을 수행하지 않고 원문 그대로를 표준 입력으로 전달한다. - 이를 Here String과 구분하는 중요한 특징이다.
- 종료 구분자를 작은따옴표로 감싸면(예:
2.2 내부 동작 과정
- 임시 파일 생성:
- 쉘은 Here Document의 내용을 저장하기 위해 시스템의 임시 디렉터리(일반적으로
/tmp)에 숨겨진 임시 파일을 생성한다.
- 쉘은 Here Document의 내용을 저장하기 위해 시스템의 임시 디렉터리(일반적으로
- 내용 복사:
- 스크립트 내 Here Document 섹션의 모든 텍스트가 이 임시 파일에 기록된다.
- 리다이렉션:
- 쉘은 명령을 실행하면서 표준 입력(stdin)을 이 임시 파일로 리다이렉션(
0< temp_file)한다.
- 쉘은 명령을 실행하면서 표준 입력(stdin)을 이 임시 파일로 리다이렉션(
- 실행 후 삭제:
- 명령 실행이 완료된 후, 쉘은 생성된 임시 파일을 자동으로 삭제하여 시스템을 깨끗하게 유지한다.
3. 사용법 및 구분
3.1 기본 구문
COMMAND << DELIMITER
문자열 라인 1
문자열 라인 2
...
DELIMITER
3.2 cat을 이용한 파일 생성
cat > my_file.txt << EOF
Hello, world!
이것은 Here Document로 작성된 내용입니다.
변수 확장도 가능함 (아래 예시 참고)
EOF

3.3 변수 확장 예시
USER_NAME="Swoo"
cat << END_OF_TEXT
현재 로그인된 사용자는 $USER_NAME 입니다.
쉘 버전은 $(bash --version | head -n 1) 입니다. # 명령 치환도 작동한다.
END_OF_TEXT

3.4 변수 확장 비활성화 예시
USER_NAME="Swoo"
cat << 'EOT'
$USER_NAME은 변수 확장 없이 문자열 그대로 출력된다.
$(whoami)도 그대로 출력된다.
EOT

Loading comments...