Як уникнути персонажів у гередоку?


22

Я працюю зі скриптом bash, намагаючись утримати його від спроби заміни змінних всередині мого heredoc. Як встановити гередок або A) уникнути імен змінних замість їх розбору, або B) повернути весь рядок недоторканим?

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

Як і коли я закінчую вводити його у файл, мені залишається таке:

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

Відповіді:


33

На bash(1)чоловіковій сторінці:

Якщо будь-які символи у слові цитуються, роздільник є результатом видалення лапки на слові , а рядки в документі тут не розширюються.

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

3
+1 Уникнення "обмеження рядка" також працює ( \END). Дивіться також tldp.org/LDP/abs/html/here-docs.html#EX71C
Джон Маккарті

Одиночні цитати також працюють
Жоао Коста,

Цей же механізм працює і для оболонки Korn (кш).
jhfrontz

19

Тільки з косою рисою:

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

Чи знаєте ви, як відключити введення змінних значень, не виходячи з кожного з них?
Xeoncross

2
Що сказав Ігнасіо, але я цього не знав :)
Halfgaar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.