Frage Wie entkommst du Charakteren in heredoc?


Ich arbeite mit einem Bash-Skript, um zu verhindern, dass es versucht, Variablen in meinem Heredoc zu ersetzen. Wie setzt man ein heredoc auf A) entkomme die Variablennamen, anstatt sie zu analysieren, oder B) gebe den gesamten String unverändert zurück?

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

Wenn ich es in eine Datei einfüge, bleibt mir Folgendes:

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

21
2018-06-16 15:31


Ursprung




Antworten:


Von dem bash(1) man seite:

Wenn irgendwelche Zeichen in Wort sind          zitiert, der Trennzeichen ist das Ergebnis der Zitatentfernung auf Wort, und das          Zeilen im Here-Dokument werden nicht erweitert.

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

30
2018-06-16 16:00



+1 Das Entkommen der "limit string" funktioniert auch (\END). Siehe auch tldp.org/LDP/abs/html/here-docs.html#EX71C - John McCarthy
Einfache Anführungszeichen funktionieren auch - Joao Costa
Derselbe Mechanismus funktioniert für die Korn-Shell (ksh). - jhfrontz


Nur mit einem Backslash:

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

16
2018-06-16 15:40



Wissen Sie, wie Sie die Injektion variabler Werte deaktivieren können, ohne sie zu umgehen? - Xeoncross
Was Ignacio sagte, aber das wusste ich nicht :) - Halfgaar