Profile picture

[Linux] Here Document, Here Strings, EOF

JaehyoJJAng2023년 04월 17일

◾️ 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'

Loading script...