¿Cómo escapas de los personajes en heredoc?


22

Estoy trabajando con un script bash tratando de evitar que intente reemplazar variables dentro de mi heredoc. ¿Cómo configurar un heredoc para A) escapar de los nombres de las variables en lugar de analizarlos o B) devolver toda la cadena intacta?

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 es, cuando termino de inyectarlo en un archivo, me queda esto:

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

Respuestas:


33

Desde la bash(1)página del manual:

Si se citan caracteres en palabras , el delimitador es el resultado de la eliminación de comillas en palabras , y las líneas en el documento aquí no se expanden.

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

3
+1 Escapar de la "cadena de límite" también funciona ( \END). Ver también tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Las comillas simples también funcionan
Joao Costa

El mismo mecanismo funciona para el shell Korn (ksh).
jhfrontz

19

Solo con una barra invertida:

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

¿Sabes cómo deshabilitar la inyección de valores variables sin escapar de cada uno?
Xeoncross

2
Lo que dijo Ignacio, pero no lo sabía :)
Halfgaar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.