GNU/Linux >> Belajar Linux >  >> Linux

Shell - Tulis konten variabel ke file

Tidak ada jawaban di atas yang berfungsi jika variabel Anda:

  • dimulai dengan -e
  • dimulai dengan -n
  • dimulai dengan -E
  • berisi \ diikuti dengan n
  • seharusnya tidak ada tambahan baris baru yang ditambahkan setelahnya

sehingga mereka tidak dapat diandalkan untuk konten string arbitrer.

Di bash, Anda dapat menggunakan "here strings" sebagai:

cat <<< "$var" > "$destdir"

Seperti disebutkan dalam komentar oleh Ash di bawah, jawaban @Trebawa (dirumuskan di ruangan yang sama dengan saya!) menggunakan printf adalah pendekatan yang lebih baik daripada cat .


Semua hal di atas berfungsi, tetapi juga harus mengatasi masalah (lolos dan karakter khusus) yang tidak perlu terjadi sejak awal:Karakter khusus saat variabel diperluas oleh shell. Jangan lakukan itu (ekspansi variabel) sejak awal. Gunakan variabel secara langsung, tanpa ekspansi.

Juga, jika variabel Anda berisi rahasia dan Anda ingin menyalin rahasia itu ke dalam file, Anda mungkin ingin tidak memiliki perluasan di baris perintah karena pelacakan/gema perintah dari perintah shell mungkin mengungkapkan rahasianya. Artinya, semua jawaban yang menggunakan $var di baris perintah mungkin memiliki potensi risiko keamanan dengan memaparkan konten variabel ke pelacakan dan pencatatan shell.

Untuk variabel yang sudah diekspor, gunakan ini:

printenv var >file

Artinya, jika ada pertanyaan OP:

printenv var >"$destfile"

Catatan:nama variabel peka huruf besar/kecil.

Peringatan:Mengekspor variabel hanya untuk mencetaknya dengan printenv bukanlah ide yang baik. Jika Anda memiliki variabel skrip yang tidak diekspor yang berisi rahasia, mengekspornya akan mengeksposnya ke semua proses anak di masa mendatang (kecuali tidak diekspor, misalnya menggunakan export -n ).


Gunakan echo perintah:

var="text to append";
destdir=/some/directory/path/filename

if [ -f "$destdir" ]
then 
    echo "$var" > "$destdir"
fi

if menguji $destdir itu mewakili file.

> menambahkan teks setelah memotong file. Jika Anda hanya ingin menambahkan teks di $var ke file yang sudah ada isinya, lalu gunakan >> sebagai gantinya:

echo "$var" >> "$destdir"

cp perintah digunakan untuk menyalin file (ke file), bukan untuk menulis teks ke file.


echo memiliki masalah jika var berisi sesuatu seperti -e , itu akan ditafsirkan sebagai bendera. Pilihan lainnya adalah printf , tetapi printf "$var" > "$destdir" akan memperluas setiap karakter yang lolos dalam variabel, jadi jika variabel berisi garis miring terbalik, konten file tidak akan cocok. Namun, karena printf hanya menafsirkan garis miring terbalik sebagai jalan keluar dalam string format, Anda dapat menggunakan %s penentu format untuk menyimpan konten variabel yang tepat ke file tujuan:

printf "%s" "$var" > "$destdir"


Linux
  1. Menyimpan Output Perintah Dalam Variabel Shell?

  2. Mengapa Variabel Terlihat Dalam Subkulit?

  3. Deskriptor File &Skrip Shell?

  1. Melakukan Operasi Tulis Atom Dalam File Di Bash?

  2. Keluarkan Isi File Saat Mereka Berubah?

  3. Menemukan konten dari satu file di file lain

  1. Bagaimana Cara Menulis File Ke Yang Lain?

  2. Tulis Semua Tmux Scrollback Ke File?

  3. Bagaimana Membuat File Sementara Di Shell Script?