Como você evita caracteres em heredoc?

21

Estou trabalhando com um script bash tentando impedi-lo de tentar substituir variáveis dentro do meu heredoc. Como configurar um heredoc para A) escapar os nomes das variáveis ao invés de analisá-los ou B) retornar toda a string 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 terminar de injetá-lo em um arquivo, fico com isso:

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}
    
por Xeoncross 16.06.2012 / 17:31

2 respostas

30

Na página bash(1) man:

If any characters in word are quoted, the delimiter is the result of quote removal on word, and the lines in the here-document are not expanded.

cat > /etc/nginx/sites-available/default_php <<"END"
    
por 16.06.2012 / 18:00
17

Apenas com uma barra invertida:

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