Heredoc'taki karakterlerden nasıl kaçarsın?


22

Heredoc'umdaki değişkenleri değiştirmeyi denemeyi engellemeye çalışan bir bash betiği ile çalışıyorum. Heredoc'u A) ya ayrıştırmak yerine değişken isimlerinden kaçar ya da B) dokunmamış dizgenin tamamını döndürürsün?

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

Olduğu gibi, bir dosyaya enjekte etmeyi bitirdiğimde şununla kaldım:

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

Yanıtlar:


33

Gönderen bash(1)adam sayfası:

Sözcükteki herhangi bir karakterden alıntı yapıldıysa , sınırlayıcı sözcükteki alıntı kaldırmanın sonucudur ve buradaki belgede bulunan satırlar genişletilmez.

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

3
+1 "limit string" karakterinden kaçmak da çalışıyor ( \END). Ayrıca bakınız tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Tek tırnak çok işe
Joao Costa

Aynı mekanizma Korn kabuğu (ksh) için de geçerlidir.
jhfrontz

19

Sadece bir ters eğik çizgi ile:

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

Her birinden kaçmadan değişken değerlerin enjeksiyonunu nasıl devre dışı bırakacağını biliyor musun?
Xeoncross

2
Ignacio ne dedi, ama bunu bilmiyordum :)
Halfgaar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.