Anda hanya membutuhkan sedikit perubahan; tanda kutip tunggal pemisah dokumen di sini setelahnya <<
.
cat <<'EOF' >> brightup.sh
atau dengan kata lain backslash-escape:
cat <<\EOF >>brightup.sh
Tanpa kutipan, dokumen di sini akan mengalami substitusi variabel, backticks akan dievaluasi, dll, seperti yang Anda temukan.
Jika Anda perlu memperluas beberapa, tetapi tidak semua, nilai, Anda harus melepaskan nilai yang ingin Anda cegah satu per satu.
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
akan menghasilkan
#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"
Seperti yang disarankan oleh @fedorqui , berikut adalah bagian yang relevan dari man bash
:
Berikut Dokumen
Jenis pengalihan ini menginstruksikan shell untuk membaca masukan dari sumber saat ini hingga baris yang hanya berisi pembatas (tanpa tanda kosong) terlihat. Semua baris yang terbaca hingga titik itu kemudian digunakan sebagai input standar untuk sebuah perintah.
Format dokumen di sini adalah:
<<[-]word
here-document
delimiter
Tidak ada perluasan parameter, penggantian perintah, perluasan aritmatika, atau perluasan nama jalur yang dilakukan pada kata. Jika ada karakter dalam kata yang dikutip, pembatas adalah hasil dari penghapusan kutipan pada kata, dan baris dalam dokumen di sini tidak diperluas. Jika kata tidak dikutip, semua baris dari dokumen di sini dikenakan ekspansi parameter, penggantian perintah, dan ekspansi aritmatika . Dalam kasus terakhir, urutan karakter \ diabaikan, dan \ harus digunakan untuk mengutip karakter \, $, dan `.
#!/bin/bash
dan tidak ada yang lain - baris#!
inilah yang membuatnya menjadi baris shebang yang valid, dan yang muncul setelahnya adalah jalur ke penerjemah.