Bash 스크립트: Cat 파일에 "$" 문자가 포함된 여러 줄

Bash 스크립트: Cat 파일에 "$" 문자가 포함된 여러 줄

저는 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에서도 작동합니다.

관련 정보