Sal*_*nes 2 cat here-document variable
我在 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
Run Code Online (Sandbox Code Playgroud)
但没有成功。怎么做?
你需要取消引用EOF:
如果word的任何部分被引用,则通过对word进行引用去除形成分隔符,并且不得扩展here-document行。否则,分隔符应为单词本身。
如果没有引用 word 的任何部分,则此处文档的所有行都应进行参数扩展、命令替换和算术扩展。
请参阅:2.7.4 此处文档
但是请注意,您的 here 文档中有几件事需要单独转义以防止扩展:
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
Run Code Online (Sandbox Code Playgroud)