Wie entkommt man Charakteren in Heredoc?


22

Ich arbeite mit einem Bash-Skript, um zu verhindern, dass es versucht, Variablen in meinem Heredoc zu ersetzen. Wie kann ein Heredoc eingestellt werden, um entweder A) die Variablennamen zu umgehen, anstatt sie zu analysieren, oder B) die gesamte Zeichenfolge unberührt zurückzugeben?

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

So wie es ist, wenn ich es in eine Datei eingefügt habe, habe ich folgendes übrig:

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

Antworten:


33

Von der bash(1)Manpage:

Wenn Zeichen in Wörtern in Anführungszeichen gesetzt werden, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen in Wörtern , und die Zeilen im Here-Dokument werden nicht erweitert.

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

3
+1 Es funktioniert auch ( \END), wenn die "Grenzwertzeichenfolge" umgangen wird . Siehe auch tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Einfache Anführungszeichen funktionieren auch
Joao Costa

Der gleiche Mechanismus funktioniert für die Korn-Shell (ksh).
jhfrontz

19

Nur mit einem Backslash:

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

Wissen Sie, wie Sie das Einfügen von Variablenwerten deaktivieren können, ohne die einzelnen Werte zu verlassen?
Xeoncross

2
Was Ignacio gesagt hat, aber das wusste ich nicht :)
Halfgaar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.