Saya sudah googling pertanyaan ini tidak berhasil. Saya mengotomatiskan proses pembuatan di sini di tempat kerja, dan semua yang saya coba lakukan adalah mendapatkan nomor versi dan deskripsi kecil dari bangunan yang mungkin multi-line. Sistem yang digunakan ini adalah OSX 10.6.8.
Saya telah melihat semuanya mulai dari menggunakan CAT hingga memproses setiap baris seperlunya. Saya tidak tahu apa yang harus saya gunakan dan mengapa.
Mencoba
read -d '' versionNotes
Menghasilkan input yang kacau jika pengguna harus menggunakan kunci backspace. Juga tidak ada cara yang baik untuk menghentikan input karena ^ D tidak berhenti dan ^ C hanya keluar dari proses.
read -d 'END' versionNotes
Berfungsi ... tetapi input input masih rusak jika tombol backspace diperlukan.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
Tidak mengakhiri input dengan benar (karena saya terlambat mencari yang cocok dengan string kosong).
Jawaban:
man bash
menyebutkan «...... »
dan saya setuju ini layak disebut -
echo "$myVar"
akan menampilkan input seperti yang diberikan.sumber
man stty
, cari tahu bagaimana mendapatkan pengaturan saat iniCoba ini:
Tanpa jeda baris:
Dengan jeda baris:
sumber
-d ''
persis apa yang saya butuhkan. Terima kasihLihat Panduan Bash yang bagus untuk semua kebutuhan skrip bash Anda.
Secara khusus, Bash FAQ berisi ini di nomor # 1:
Bagaimana saya bisa membaca file (aliran data, variabel) baris demi baris (dan / atau bidang-demi-bidang)?
sumber
read -r
, tetapi bagaimana saya mendapatkannya dari STDIN? Saya memang berusaha menggunakannyaread -r
sejak dini.Saya telah memecahkan masalah ini dengan menangani setiap baris sampai saya menemukan baris kosong. Ini cukup berhasil untuk situasi saya. Tetapi jika seseorang ingin menambahkan solusi yang lebih baik, jangan ragu untuk melakukannya.
sumber
read -r
sebagai gantinya.Anda dapat memulai editor seperti vim, pico ...
sumber
Pertama beberapa koreksi:
-e
yang menggunakan readline (sehingga Anda memiliki riwayat bash dan semua fitur pengeditan)-d
hanya membutuhkan satu karakter. Misal dari 'END' mengambil 'E' dan setiap kali pengguna menulis 'E' pembacaan berhenti (saya kira itu bukan yang Anda inginkan ...)Ada beberapa kemungkinan untuk melakukan ini. Saya akan membaca baris demi baris dan berhenti ketika baris kosong ditemukan (meskipun Anda dapat menyetel kata berhenti):
sumber
Anda memiliki beberapa metode.
Salah satu metode paling sederhana adalah:
Sebagai contoh:
sumber
ls
!Kami menggunakan konstruksi menggunakan xargs dan ctrl-d untuk memecah. Saya tidak sepenuhnya puas dengan itu, tetapi tentu saja pekerjaan mengambil input multi-line pengguna dan memasukkannya ke dalam variabel (format utuh). (Tugas pertama dan ketiga menambahkan tanda kutip di sekitar isi input xargs.)
Kami menggunakan reminderBody sebagai subjek email yang dikirim melalui surat (via bash).
sumber
Lihat: http://tldp.org/LDP/abs/html/internal.html#READR
Gunakan
read
dan perhatikan bahwa jika Anda mengakhiri baris dengan\
baris baru diabaikan. Jadi Anda bisa melakukan:sumber