Übergeben Sie die Variable an cat

Übergeben Sie die Variable an cat

Ich habe nur eine Variable im Bash-Skript ${PHP_V}und versuche, eine Nginx-Konfigurationsdatei wie folgt zu übergeben:

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

aber ohne Erfolg. Wie geht das?

Antwort1

Sie müssen die Anführungszeichen entfernen EOF:

Wenn ein Teil des Wortes in Anführungszeichen steht, wird das Trennzeichen durch Entfernen der Anführungszeichen im Wort gebildet und die Zeilen im Dokument werden nicht erweitert. Andernfalls wird das Wort selbst als Trennzeichen verwendet.

Wenn kein Teil des Wortes in Anführungszeichen gesetzt ist, sollen alle Zeilen des Here-Dokuments zur Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung erweitert werden.

Sehen :2.7.4 Hier-Dokument


Beachten Sie jedoch, dass es in Ihrem Dokument mehrere Dinge gibt, die einzeln maskiert werden müssen, um eine Erweiterung zu verhindern:

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

verwandte Informationen