私はnginx Webサーバーを含むいくつかのインストールを自動化するスクリプトを書いています。
次のようにnginx confファイルを生成しています。
cat >/etc/nginx/sites-available/bookstack.conf <<EOL
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/nginx/certificats/domain.tld.crt;
ssl_certificate_key /etc/nginx/certificats/domain.tld.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
server_name domain.tld;
root /path/to/bookstack/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_index index.php;
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}
}
server {
listen 80;
listen [::]:80;
server_name domain.tld;
return 302 https://$server_name$request_uri;
}
EOL
私の問題は、catが$文字を変数名として使用し(通常意味がある)、私が望むものを変数名に入れないことです。.conf文書。これは私のサンプルです。.confスクリプトが完了した後のファイル:
location / {
try_files / /index.php?;
}
location ~ \.php$ {
fastcgi_index index.php;
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME ;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
この動作を防ぐにはどうすればよいですか?引用符を使ってみましたが、成功しませんでした。
ありがとうございます:)
答え1
この文書(構成された入力)で代替操作を実行したくない場合は、<<EOL
区切り記号の仕様に引用符を使用してください。どんな引用でも大丈夫です。<<'EOL'
(推奨)、<<\EOL
などを書くこと<<E''OL
も、(混乱しても)書くこともできます<<"EOL"
。
$ cat <<'EOL'
> $foo
> EOL
$foo
場合によっては、変数やコマンドの置換を拡張したい場合は、拡張したくない<<EOL
各特殊文字の前にバックスラッシュを置いてください。エスケープする必要がある特殊文字はです$\`
。
バッシュマニュアルを参照してくださいここにファイル。これは通常のshでも機能します。