[Linux] Here Document, Here Strings, EOF

◾️ Here Document

here document는 특정 command의 표준 입력으로 리다이렉트 되어지는 text block을 의미하며

주로 셸 스크립트에서 사용된다.


▪️ 문법

command << string # command의 표준 입력으로 사용될 내용을 기입

위와 같이 사용하며, 이는 커맨드라인 상에서 command < file을 입력하는 것과 동일하다.
(file에 command의 표준 입력으로 사용될 텍스트가 작성되어 있었다고 가정)


▪️ 스크립트 예시

1

here document의 command 자리에는 표준 입력을 받을 커맨드명을 적고, string 자리에는 자신이 사용할 이름을 변수 적듯 적으면 된다.

#!/usr/bin/bash

cat << HI
Your name: wow1
HI
bash script1.sh

Your name: wow1

2

또한 here document 안에는 parameter expansion, command substitution, arithmetic expansion 기능을 사용하는 것이 가능하다.

#!/usr/bin/bash

HOST='master'

cat << HI
(Parameter Expansion)  Your Host: $HOST
(command substitution) pwd's output: $(pwd)
(arithmetic expansion) 5 + 5 result: $(( 5 + 5 ))
HI
bash script2.sh

(Parameter Expansion)  Your Host: master
(command substitution) pwd's output: /home/master
(arithmetic expansion) 5 + 5 result: 10

◾️ Here Strings

here document가 다수의 텍스트를 특정 command의 표준 입력으로 넣을 때 사용된다면

here strings의 경우 짧은 길이의 스트링을 특정 command의 표준 입력으로 넣을 때 사용되며, 문법은 다음과 같다.

cat <<< "Hello World"

text에 space가 포함되어 있을 경우 double quote(")로 감싸주도록 하자.


◾️ EOF

  • 직접 입력한 텍스트를 파일에 저장할 떄 주로 사용
  • 시작 및 종료를 알리는 키워드로 주로 EOF(End Of File) 또는 EOT(End Of Text)를 쓰는데, 임의로 정하는 것이므로 사용자가 원하는 다른 키워드로도 지정 가능

<< EOF
text1
text2
...
...
EOF
  • EOF가 나올 때 까지의 명령어를 순차적으로 실행해 프로그램에 입력해줄 수 있음.
  • 입력의 끝을 나타내는 EOF는 반드시 앞에 공백이나 tab(\t)이 없어야 함

▪️ 케이스 1

  • 출력 값을 test.txt 파일로 저장

cat << EOF > test.txt
테스트1
테스트2
테스트3
EOF

▪️ 케이스 2

  • 다른 키워드로 지정해보기

1

cat > text.txt << EOT
테스트1
테스트2
테스트3
EOT

2

cat << __EOT__ > test.txt
테스트1
테스트2
테스트3
__EOT__

▪️ 케이스 3

  • sudo 권한으로 실행 해야 하는 경우
sudo sh -c 'cat >> /etc/hosts << EOF
192.168.0.156 internal-ec2
192.168.0.28  public-ec2
EOF'

관련 글

지식 공유3분 읽기

[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션

개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...

리눅스
지식 공유3분 읽기

[Linux] 테스트 서버 디스크 장애 이슈

개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...

리눅스
지식 공유1분 읽기

[Linux] SSH Keygen으로 원격 접속 키 생성하기

SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...

리눅스