Come fuggi i personaggi in eredità?


22

Sto lavorando con uno script bash cercando di impedire che tenti di sostituire le variabili all'interno della mia eredità. Come impostare un'ereditarietà su A) sfuggire ai nomi delle variabili invece di analizzarli o B) restituire l'intera stringa intatta?

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

Così com'è, quando finisco di iniettarlo in un file mi rimane questo:

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

Risposte:


33

Dalla bash(1)pagina man:

Se vengono citati caratteri nella parola , il delimitatore è il risultato della rimozione della citazione nella parola e le righe nel documento qui non vengono espanse.

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

3
+1 Funziona anche con l'escaping della "stringa limite" ( \END). Vedi anche tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Anche le virgolette singole funzionano
Joao Costa,

Lo stesso meccanismo funziona con Korn shell (ksh).
jhfrontz,

19

Solo con una barra rovesciata:

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

Sai come disabilitare l'iniezione di valori variabili senza sfuggire a ciascuno?
Xeoncross,

2
Cosa ha detto Ignacio, ma non lo sapevo :)
Halfgaar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.