Bạn chỉ cần một thay đổi tối thiểu; trích dẫn đơn dấu phân cách ở đây tài liệu sau <<
.
cat <<'EOF' >> brightup.sh
hoặc dấu gạch chéo ngược tương đương - thoát khỏi nó:
cat <<\EOF >>brightup.sh
Nếu không có trích dẫn, tài liệu ở đây sẽ trải qua quá trình thay thế biến, dấu gạch ngược sẽ được đánh giá, v.v., giống như bạn đã khám phá.
Nếu bạn cần mở rộng một số, nhưng không phải tất cả, giá trị, bạn cần phải thoát khỏi những giá trị bạn muốn ngăn chặn.
cat <<EOF >>brightup.sh
#!/bin/sh
# Created on $(date # : <<-- this will be evaluated before cat;)
echo "\$HOME will not be evaluated because it is backslash-escaped"
EOF
sẽ sản xuất
#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"
Theo đề xuất của @fedorqui , đây là phần có liên quan từ man bash
:
Tài liệu đây
Loại chuyển hướng này hướng dẫn shell đọc đầu vào từ nguồn hiện tại cho đến khi thấy một dòng chỉ chứa dấu phân cách (không có khoảng trống ở cuối). Tất cả các dòng được đọc đến thời điểm đó sau đó được sử dụng làm đầu vào chuẩn cho một lệnh.
Định dạng của tài liệu ở đây là:
<<[-]word
here-document
delimiter
Không có mở rộng tham số, thay thế lệnh, mở rộng số học hoặc mở rộng tên đường dẫn được thực hiện trên word. Nếu bất kỳ ký tự nào trong word được trích dẫn, dấu phân cách là kết quả của việc xóa trích dẫn trên word và các dòng trong tài liệu ở đây không được mở rộng. Nếu từ không được trích dẫn, tất cả các dòng của tài liệu ở đây phải chịu sự mở rộng tham số, thay thế lệnh và mở rộng số học . Trong trường hợp thứ hai, chuỗi ký tự \ bị bỏ qua và \ phải được sử dụng để trích dẫn các ký tự \, $ và `.
#!/bin/bash
và không có gì khác - đó#!
là thứ làm cho nó trở thành một dòng shebang hợp lệ và những gì xuất hiện sau nó là đường dẫn đến trình thông dịch.