Como você escapa personagens no heredoc?


22

Estou trabalhando com um script bash tentando impedi-lo de tentar substituir variáveis ​​dentro do meu heredoc. Como definir um heredoc para A) escapar dos nomes das variáveis ​​em vez de analisá-los ou B) retornar a string inteira intocada?

cat > /etc/nginx/sites-available/default_php <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/$host; <--- $host is a problem child
}
END

Como é, quando eu termino de injetá-lo em um arquivo, fico com isso:

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}

Respostas:


33

Na bash(1)página do manual:

Se algum caractere no word for citado, o delimitador é o resultado da remoção de aspas no word e as linhas no documento aqui não são expandidas.

cat > /etc/nginx/sites-available/default_php <<"END"

3
Escapar da "string de limite" também funciona ( \END). Veja também tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Aspas simples trabalhar muito
João Costa

O mesmo mecanismo funciona para o shell Korn (ksh).
Jhfrontz #

19

Apenas com uma barra invertida:

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END

Você sabe como desativar a injeção de valores de variáveis ​​sem escapar de cada um?
Xeoncross

2
O que Ignacio disse, mas eu não sabia que :)
Halfgaar
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.