Shell: bagaimana menulis file teks multiline tanpa keluar dari simbol khusus?

3

Saya tahu pertanyaannya sepertinya harus didiskusikan ribuan kali sebelumnya. Tetapi entah bagaimana saya tidak dapat menemukan solusi yang baik.

Masalah: Saya perlu menulis teks multiline dari shell. Teks mungkin berisi urutan karakter khusus (mulai dari $) dan saya tidak ingin menghindarinya. Bagaimana cara melakukannya?

Saat ini saya menggunakan kucing:

cat <<TAGTEXTFILE > sometext.txt
Here is some text in which I don't want to escape sequences like: $().
I just want to see this text in this script exactly as 
it will look in resulting sometext.txt file.
TAGTEXTFILE

Tetapi dengan kucing saya harus melarikan diri ini: $ (). Bagaimana cara menulis teks multiline tanpa keluar dari karakter khusus? Tolong jangan menawarkan untuk menggunakan Python, saya butuh solusi shell (bash atau dash).

vladimir
sumber
1
Apa sistemmu? saya tidak dapat mereproduksi masalah Anda di tambang (Ubuntu 12.04 dan Debian 5). Salin / tempel kode Anda berfungsi seperti pesona ...
user2196728
@ user2196728 berfungsi, tetapi tidak akan berfungsi jika ada $ PWD di dalamnya, misalnya. itu intinya
Robin Green
Apakah Anda ingin $PWDdiperluas (suka /home/vladimir/foo/) atau tidak?
terdon
Ya, tepat sekali. Sampel saya bukan dari kehidupan nyata, saya baru saja mengubahnya. Jadi '$ ()' muncul dalam skrip tetapi tidak dalam file teks yang dihasilkan. Saya mengerti mengapa, saya hanya tidak membutuhkan fungsi ini. Sebenarnya saya tidak ingin ekspansi, atau $ PWD maupun $ (...) perintah dan masih perlu cara mudah untuk menulis teks multiline.
vladimir

Jawaban:

7
cat <<"TAGTEXTFILE" > sometext.txt
... some text ...
TAGTEXTFILE
Robin Green
sumber
Wow! Trik apa! Bagaimana Anda belajar hal-hal seperti itu? Apakah itu di suatu tempat dalam diri manusia?
vladimir
itu di info bash. Tetapi umumnya ketika saya ingin tahu bagaimana melakukan sesuatu di bash saya menggunakan Google, karena dokumentasinya sulit dinavigasi.
Robin Green
Lihat bagian manhalaman di bawah "Di sini dokumen". Kalimat yang relevan adalah "Jika ada karakter dalam kata yang dikutip, [...] baris dalam dokumen di sini tidak diperluas".
chepner