Bagaimana untuk cat file yang berisi kode?

Saya ingin mencetak kode ke dalam file menggunakan kucing <<EOF >>:

cat <<EOF >> brightup.sh
!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
   curr=$((curr+406));
   echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi
EOF

tapi ketika saya cek file output, saya mendapatkan ini:

!/bin/bash
curr=1634
if [  -lt 4477 ]; then
   curr=406;
   echo   > /sys/class/backlight/intel_backlight/brightness;
fi

Aku mencoba menempatkan tanda kutip tunggal tetapi output juga membawa tanda kutip tunggal dengan itu. Bagaimana saya bisa menghindari masalah ini?

Mengomentari pertanyaan (3)
Larutan

Anda hanya perlu sedikit perubahan; single-quote di sini-dokumen pembatas setelah <<.

cat  brightup.sh

atau ekuivalen backslash-melarikan diri itu:

cat brightup.sh

Tanpa mengutip, berikut dokumen akan menjalani substitusi variabel, backticks akan dievaluasi, dll, seperti yang anda temukan.

Jika anda perlu untuk memperluas beberapa, tapi tidak semua, nilai-nilai, anda perlu untuk secara individual melarikan diri orang-orang yang anda ingin mencegah.


cat brightup.sh
#!/bin/sh
# Created on $(date # : 
Komentar (7)

Atau, menggunakan EOF spidol, anda perlu untuk penawaran awal penanda agar perluasan tidak't harus dilakukan:

#-----v---v------
cat  brightup.sh
#!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
   curr=$((curr+406));
   echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi
EOF

IHTH

Komentar (2)

Ini harus bekerja, aku hanya diuji dan bekerja seperti yang diharapkan: tidak ada ekspansi, substitusi, atau apa-yang-anda berlangsung.

cat  file # use overwrite mode so that you don't keep on appending the same script to that file over and over again, unless that's what you want. 

Menggunakan berikut juga bekerja.


cat 
Komentar (3)