Here Document๋?
Here Document(์ดํ heredoc)๋ ์ฌ๋ฌ ์ค์ ๋ฌธ์์ด์ ์ฝ๊ณ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์ ํ๋ก๊ทธ๋๋ฐ์ ํน๋ณํ ๊ธฐ๋ฅ์ด๋ค. ๋ง์น ๋ ์คํ ๋์์ ์ฃผ๋ฐฉ์ ์ฃผ๋ฌธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ฒ๋ผ, ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ์ค์ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์ ๋ฌํ ์ ์๋ค.
๊ธฐ๋ณธ ๋์ ๋ฐฉ์
heredoc๋ ์ง์ ๋ ๊ตฌ๋ถ์(๋ณดํต EOF๋ EOT ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ์์๊ณผ ๋์ ํ์ํ๋ค. ๊ตฌ๋ถ์ ์ฌ์ด์ ๋ชจ๋ ํ ์คํธ๋ ๊ทธ๋๋ก ์ ์ง๋๋ฉฐ, ๋ณ์ ํ์ฅ๊ณผ ๋ช ๋ น ์นํ๋ ๊ฐ๋ฅํ๋ค.
๊ธฐ๋ณธ ๋ฌธ๋ฒ:
command << DELIMITER
text content
more text content
DELIMITER์ค์ ์ฌ์ฉ ์์
1. ๊ฐ๋จํ ํ์ผ ์์ฑ
# ์ผ๋ฐ์ ์ธ ๋ฐฉ์
echo "Hello" > greeting.txt
echo "World" >> greeting.txt
# heredoc ํ์ฉ
cat << EOF > greeting.txt
Hello
World
EOF2. ์ค์ ํ์ผ ์์ฑ
# MySQL ์ค์ ํ์ผ ์์ฑ ์์
sudo cat << EOF > /etc/mysql/conf.d/custom.cnf
[mysqld]
max_connections = 100
query_cache_size = 32M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
EOF๊ณ ๊ธ ํ์ฉ๋ฒ
1. ๋ณ์ ํ์ฅ ์ ์ด
# ๋ณ์ ํ์ฅ ํ์ฉ (๊ธฐ๋ณธ)
name="John"
cat << EOF
Hello, $name!
EOF
# ๋ณ์ ํ์ฅ ๋ฐฉ์ง
cat << 'EOF'
Hello, $name!
EOF2. ๋ค์ฌ์ฐ๊ธฐ ์ฒ๋ฆฌ
# ๋ค์ฌ์ฐ๊ธฐ ์ ์ง
cat << 'EOF' | sed 's/^/ /'
function example() {
console.log("Hello");
}
EOF์ฃผ์์ฌํญ
- ๊ตฌ๋ถ์(EOF ๋ฑ)๋ ์ค์ ๋งจ ์์ ์์ด์ผ ํ๋ค
- ๊ตฌ๋ถ์ ์ฃผ๋ณ์ ์ถ๊ฐ ๊ณต๋ฐฑ์ด ์์ด์ผ ํ๋ค
- ์๋ํ์ง ์์ ๋ณ์ ํ์ฅ์ ์ฃผ์ํด์ผ ํ๋ค
- ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ธ heredoc์ ๋ณ์ ํ์ฅ์ด ๋ฐ์ํ๋ค
์ค์ ์ฌ์ฉ ์๋๋ฆฌ์ค
Docker ์ปจํ ์ด๋ ์ค์
# Dockerfile ์์ฑ
cat << 'EOF' > Dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
nginx \
curl
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
EOF์์คํ ์๋น์ค ์ค์
# ์์คํ
์๋น์ค ํ์ผ ์์ฑ
sudo cat << EOF > /etc/systemd/system/myapp.service
[Unit]
Description=My Application Service
After=network.target
[Service]
Type=simple
User=myapp
ExecStart=/usr/local/bin/myapp
Restart=always
[Install]
WantedBy=multi-user.target
EOF์ฑ๋ฅ๊ณผ ๋ณด์ ๊ณ ๋ ค์ฌํญ
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ณ ๋ ค
- ๋ณ์ ํ์ฅ ์ ๋ณด์ ์ทจ์ฝ์ ์ฃผ์
- ๋ฏผ๊ฐํ ์ ๋ณด ์ฒ๋ฆฌ ์ ๊ถํ ์ค์ ํ์ธ
- ์์ ํ์ผ ์์ฑ ์ต์ํ
๊ฒฐ๋ก
heredoc์ ๋ณต์กํ ๋ฌธ์์ด์ด๋ ์ค์ ํ์ผ์ ๋ค๋ฃฐ ๋ ๋งค์ฐ ์ ์ฉํ ๋๊ตฌ๋ค. ํนํ ์ฌ๋ฌ ์ค์ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋, ๋์ ์ผ๋ก ์ค์ ํ์ผ์ ์์ฑํ ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.