Cara menambahkan beberapa baris ke file dengan bash, dengan "-" di depan string

9

Pertanyaan yang sangat mirip dengan Cara menambahkan beberapa baris ke file dengan bash tapi saya ingin memulai file dengan --, dan juga menambahkan file, jika mungkin.

printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Masalahnya memulai file dengan "-" memberi saya:

-bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]

Apakah ada cara untuk melarikan diri --? Apakah ada alternatif lain? Saya tidak yakin bagaimana cara menggunakan beberapa baris echo, dan catbukan pilihan yang baik, saya ingin memilikinya dalam skrip otomatis.

SuckerForMayhem
sumber

Jawaban:

17

Sebagian besar perintah yang menerima --foosebagai opsi juga menerima --dengan sendirinya sebagai penanda "akhir opsi, mulai argumen" - sehingga Anda dapat melakukan:

printf -- "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Tetapi jawaban yang lebih spesifik untuk contoh persis Anda adalah bahwa argumen pertama untuk printf adalah penentu format, dan Anda membuat hal-hal lebih sulit daripada yang diperlukan dengan tidak menggunakan printf untuk kemampuan formatnya. Ini akan menjadi cara yang lebih baik untuk melakukan apa yang Anda inginkan:

printf "%s\n" --no-color --format-doc --no-profile >> ~/.rspec-test

Itu memberitahu printf untuk mengambil setiap argumen yang didapat dan mencetaknya, diikuti oleh baris baru. Lebih mudah daripada mengulangi \ndiri Anda sendiri, dan itu menghindari --masalah utama yang Anda hadapi. Dan itu menghilangkan kebutuhan untuk melarikan diri dari %tanda-tanda bahwa string Anda mungkin berisi.

Adapun cara melakukan beberapa baris dengan echo, Anda bisa menggunakan:

echo -ne "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test

Atau, jauh lebih mudah dibawa:

{ echo --no-color; echo --format-doc; echo --no-profile; } >> ~/.rspec-test

Atau menggunakan kucing bersama dengan dokumen-sini:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
godlygeek
sumber