◾️ 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
HIbash script1.sh
Your name: wow12
또한 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 ))
HIbash 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
...
...
EOFEOF가 나올 때 까지의 명령어를 순차적으로 실행해 프로그램에 입력해줄 수 있음.- 입력의 끝을 나타내는 EOF는 반드시 앞에 공백이나 tab(\t)이 없어야 함
▪️ 케이스 1
- 출력 값을
test.txt파일로 저장
cat << EOF > test.txt
테스트1
테스트2
테스트3
EOF▪️ 케이스 2
- 다른 키워드로 지정해보기
1
cat > text.txt << EOT
테스트1
테스트2
테스트3
EOT2
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'