स्ट्रिंग के सामने "-" के साथ बैश के साथ एक फ़ाइल में कई लाइनों को कैसे जोड़ा जाए


9

प्रश्न बहुत कुछ है कि कैसे bash के साथ एक फ़ाइल में कई लाइनों को संलग्न करें, लेकिन मैं फ़ाइल को इसके साथ शुरू करना चाहता हूं --, और यदि संभव हो तो फ़ाइल के लिए भी संलग्न करें।

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

समस्या "-" के साथ फ़ाइल शुरू कर रहा है:

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

वहाँ से बचने के लिए एक रास्ता है --? क्या कोई विकल्प है? मुझे यकीन नहीं है कि कैसे कई लाइनों का उपयोग करना है echo, और catएक अच्छा विकल्प नहीं है, मैं इसे एक स्वचालित स्क्रिप्ट में रखना चाहता हूं।

जवाबों:


17

--fooविकल्प के रूप में स्वीकार करने वाली अधिकांश कमांड भी --अपने आप में "विकल्पों की समाप्ति, तर्कों की शुरुआत" मार्कर के रूप में स्वीकार करती हैं - इसलिए आप ऐसा कर सकते हैं:

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

लेकिन आपके सटीक उदाहरण के लिए अधिक विशिष्ट उत्तर यह है कि प्रिंटफ के लिए पहला तर्क एक प्रारूप विनिर्देशक है, और आप अपनी प्रारूपण क्षमताओं के लिए प्रिंटफ का उपयोग न करके चीजों को आवश्यकता से अधिक कठिन बना रहे हैं। यह एक बेहतर तरीका है कि आप क्या चाहते हैं:

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

जो प्रिंटफ को प्रत्येक तर्क को लेने और उसे प्रिंट करने के लिए कहता है, उसके बाद एक नई पंक्ति। \nअपने आप को दोहराने की तुलना में आसान है , और यह --आपके सामने आने वाली प्रमुख समस्या से बचा जाता है । और यह किसी भी ऐसे %संकेत से बचने की आवश्यकता को दूर करता है जिसमें आपके तार शामिल हो सकते हैं।

कैसे कई लाइनों के साथ करने के लिए के रूप में echo, आप उपयोग कर सकते हैं:

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

या, और भी बहुत कुछ:

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

या यहाँ-डॉक्टर के साथ बिल्ली का उपयोग करना:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.