저는 nginx 웹 서버를 포함하여 몇 가지 설치를 자동화하는 스크립트를 작성 중입니다.
다음과 같이 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에서도 작동합니다.