Solo necesita un cambio mínimo; entre comillas simples el delimitador aquí-documento después <<
.
cat <<'EOF' >> brightup.sh
o equivalentemente barra invertida-escape:
cat <<\EOF >>brightup.sh
Sin citar, el documento aquí se someterá a una sustitución de variables, se evaluarán las comillas inversas, etc., como descubrió.
Si necesita expandir algunos valores, pero no todos, debe escapar individualmente de los que desea evitar.
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
Producirá
#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"
Como sugirió @fedorqui , aquí está la sección relevante de man bash
:
Aquí Documentos
Este tipo de redireccionamiento le indica al shell que lea la entrada de la fuente actual hasta que se vea una línea que contiene solo un delimitador (sin espacios en blanco al final). Todas las líneas leídas hasta ese punto se utilizan como entrada estándar para un comando.
El formato de aquí-documentos es:
<<[-]word
here-document
delimiter
No se realiza expansión de parámetro, sustitución de comando, expansión aritmética o expansión de nombre de ruta en la palabra. Si se citan caracteres en word, el delimitador es el resultado de la eliminación de comillas en word y las líneas en el documento aquí no se expanden. Si la palabra no está entre comillas, todas las líneas del documento aquí están sujetas a expansión de parámetros, sustitución de comandos y expansión aritmética . En el último caso, la secuencia de caracteres \ se ignora y debe usarse \ para citar los caracteres \, $ y `.
#!/bin/bash
y nada más:#!
es lo que la convierte en una línea de shebang válida, y lo que viene después es el camino hacia el intérprete.