คุณต้องการการเปลี่ยนแปลงเพียงเล็กน้อย <<
อ้างเดียวตัวคั่นที่นี่เอกสารหลัง
cat <<'EOF' >> brightup.sh
หรือแบ็กสแลชที่เทียบเท่ากัน - หนีมัน:
cat <<\EOF >>brightup.sh
หากไม่มีการอ้างถึงเอกสารที่นี่จะได้รับการแทนที่ตัวแปร backticks จะได้รับการประเมิน ฯลฯ เช่นเดียวกับที่คุณค้นพบ
หากคุณต้องการขยายค่าบางค่า แต่ไม่ใช่ทั้งหมดคุณต้องหลีกเลี่ยงค่าที่คุณต้องการป้องกันทีละรายการ
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
จะผลิต
#!/bin/sh
echo "$HOME will not be evaluated because it is backslash-escaped"
ตามที่แนะนำโดย@fedorquiนี่คือส่วนที่เกี่ยวข้องจากman bash
:
เอกสารที่นี่
การเปลี่ยนเส้นทางประเภทนี้สั่งให้เชลล์อ่านอินพุตจากแหล่งที่มาปัจจุบันจนกว่าจะเห็นบรรทัดที่มีตัวคั่นเท่านั้น (โดยไม่มีช่องว่างต่อท้าย) บรรทัดทั้งหมดที่อ่านจนถึงจุดนั้นจะถูกใช้เป็นอินพุตมาตรฐานสำหรับคำสั่ง
รูปแบบของเอกสารที่นี่คือ:
<<[-]word
here-document
delimiter
ไม่มีการขยายพารามิเตอร์การแทนที่คำสั่งการขยายเลขคณิตหรือการขยายชื่อพา ธ บน word หากมีการยกตัวอักษรใด ๆ ในคำตัวคั่นจะเป็นผลมาจากการลบเครื่องหมายคำพูดออกและบรรทัดในเอกสารที่นี่จะไม่ขยาย หากคำ unquoted เส้นทั้งหมดของที่นี่เอกสารอาจมีการขยายตัวพารามิเตอร์แทนคำสั่งและการขยายตัวทางคณิตศาสตร์ ในกรณีหลังลำดับอักขระ \ จะถูกละเว้นและ \ ต้องใช้เพื่ออ้างถึงอักขระ \, $ และ "
#!/bin/bash
และไม่มีอะไรอื่น -#!
คือสิ่งที่ทำให้มันเป็นบรรทัด Shebang ที่ถูกต้องและสิ่งที่ตามมาคือเส้นทางไปยังล่าม