Pasar variable a cat

Pasar variable a cat

Solo tengo una variable en el script bash ${PHP_V}e intento pasar un archivo de configuración nginx como:

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

pero sin éxito. ¿Cómo hacer?

Respuesta1

Necesitas quitar las comillas EOF:

Si se cita alguna parte de la palabra, el delimitador se formará eliminando las comillas de la palabra y las líneas del documento aquí no se expandirán. En caso contrario, el delimitador será la propia palabra.

Si no se cita ninguna parte de la palabra, todas las líneas del documento aquí se expandirán para expansión de parámetros, sustitución de comandos y expansión aritmética.

Ver :2.7.4 Aquí-Documento


Sin embargo, tenga en cuenta que hay varias cosas en su documento aquí que deberán escaparse individualmente para evitar la expansión:

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

información relacionada