변수를 cat에 전달

변수를 cat에 전달

Bash 스크립트에는 변수가 하나만 있고 ${PHP_V}다음과 같은 nginx 구성 파일을 전달하려고 합니다.

cat <<'EOF' > /etc/nginx/sites-available/default
server {
    listen 80 default_server; 
    listen [::]:80 default_server; 

    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server; 

    root /vagrant/webroot; 

    index index.php; 

    server_name _; 

    ssl_certificate /etc/nginx/certs/vagrantbox.crt; 
    ssl_certificate_key /etc/nginx/certs/vagrantbox.key;  

    location / { 
        try_files $uri $uri/ /index.php?$args; 
    } 

    location ~ \.php$ { 
        try_files $uri =404; 
        include fastcgi_params; 
        fastcgi_pass unix:/run/php/php${PHP_V}-fpm.sock; 
        fastcgi_index index.php; 
        fastcgi_intercept_errors on; 
        fastcgi_param SCRIPT_FILENAME 
        $document_root$fastcgi_script_name; 
    }
}
EOF

그러나 성공하지 못했습니다. 수행하는 방법?

답변1

인용을 해제해야 합니다 EOF:

단어의 일부가 인용된 경우 단어에 대한 인용 제거를 수행하여 구분 기호를 형성해야 하며, here-document 행은 확장되지 않습니다. 그렇지 않으면 구분 기호는 단어 자체가 됩니다.

단어의 일부가 인용되지 않은 경우 여기 문서의 모든 행은 매개변수 확장, 명령 대체 및 산술 확장을 위해 확장됩니다.

보다 :2.7.4 여기 문서


그러나 여기 문서에는 확장을 방지하기 위해 개별적으로 이스케이프해야 하는 몇 가지 사항이 있습니다.

cat <<EOF > /etc/nginx/sites-available/default
server {
    listen 80 default_server; 
    listen [::]:80 default_server; 

    listen 443 ssl default_server; 
    listen [::]:443 ssl default_server; 

    root /vagrant/webroot; 

    index index.php; 

    server_name _; 

    ssl_certificate /etc/nginx/certs/vagrantbox.crt; 
    ssl_certificate_key /etc/nginx/certs/vagrantbox.key;  

    location / { 
        try_files \$uri \$uri/ /index.php?\$args; 
    } 

    location ~ \.php\$ { 
        try_files \$uri =404; 
        include fastcgi_params; 
        fastcgi_pass unix:/run/php/php${PHP_V}-fpm.sock; 
        fastcgi_index index.php; 
        fastcgi_intercept_errors on; 
        fastcgi_param SCRIPT_FILENAME 
        \$document_root\$fastcgi_script_name; 
    }
}
EOF

관련 정보