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