Dize önünde “-” ile bash içeren bir dosyaya birden çok satır ekleme


9

Soru bash ile bir dosyaya birden çok satır nasıl eklenir, ancak dosyayı başlatmak ve --mümkünse dosyaya eklemek istiyorum.

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

Sorun dosyayı "-" ile başlatarak bana şunu veriyor:

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

Kaçmak için bir yol var mı --? Alternatif var mı? Nasıl kullanarak birden fazla satır yapmak emin değilim echove catiyi bir seçenek değil, ben otomatik bir komut dosyası olmasını istiyorum.

Yanıtlar:


17

--fooBir seçenek olarak kabul edilen komutların çoğu --, kendi başına "seçeneklerin sonu, bağımsız değişkenlerin başlangıcı" işareti olarak kabul eder - böylece şunları yapabilirsiniz:

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

Ancak kesin örneğinize verilecek daha kesin yanıt, printf ile ilgili ilk argümanın bir format belirleyici olması ve biçimlendirme yetenekleri için printf kullanmamanız gerektiğinden işleri zorlaştırmanızdır. Bu, istediğinizi yapmanın daha iyi bir yolu olacaktır:

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

Bu, printf'e aldığı her bir argümanı almasını ve yazdırmasını, ardından bir satırsonunu bildirir. \nKendinizi tekrar etmekten daha kolaydır ve --karşılaştığınız sorunlardan kaçınır . Ve %dizelerinizin içerebileceği işaretlerden kaçma ihtiyacını ortadan kaldırır .

Birden çok satırın nasıl yapılacağı ile ilgili echoolarak şunları kullanabilirsiniz:

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

Veya çok daha taşınabilir:

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

Ya da burada bir doktorla birlikte kediyi kullanmak:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.