Làm thế nào để bạn thoát khỏi các nhân vật trong heredoc?


22

Tôi đang làm việc với một tập lệnh bash đang cố gắng ngăn nó cố gắng thay thế các biến trong bên trong di sản của tôi. Làm thế nào để đặt một di truyền thành A) thoát khỏi các tên biến thay vì phân tích cú pháp chúng hoặc B) trả lại toàn bộ chuỗi không được chạm?

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

Như là, khi tôi hoàn thành việc tiêm nó vào một tệp tôi để lại với nó:

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

Câu trả lời:


33

Từ bash(1)trang người đàn ông:

Nếu bất kỳ ký tự nào trong từ được trích dẫn, dấu phân cách là kết quả của việc loại bỏ trích dẫn trên từ và các dòng trong tài liệu ở đây không được mở rộng.

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

3
+1 Thoát khỏi "chuỗi giới hạn" cũng hoạt động ( \END). Xem thêm tldp.org/LDP/abs/html/here-docs.html#EX71C
John McCarthy

Báo giá đơn cũng hoạt động
Joao Costa

Cơ chế tương tự hoạt động cho vỏ Korn (ksh).
jhfrontz

19

Chỉ với dấu gạch chéo ngược:

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

Bạn có biết làm thế nào để vô hiệu hóa việc tiêm các giá trị biến mà không thoát khỏi từng giá trị không?
Xeoncross

2
Những gì Ignacio nói, nhưng tôi không biết điều đó :)
Halfgaar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.