วิธีผนวกหลายบรรทัดไปยังไฟล์ด้วย bash โดยใช้“ -” ที่หน้าสตริง


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 คือตัวระบุรูปแบบและคุณกำลังทำสิ่งที่ยากเกินความจำเป็นโดยไม่ใช้ printf สำหรับความสามารถในการจัดรูปแบบ นี่จะเป็นวิธีที่ดีกว่าในการทำสิ่งที่คุณต้องการ:

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

นั่นบอกให้ printf รับแต่ละอาร์กิวเมนต์ที่ได้รับและพิมพ์ตามด้วยบรรทัดใหม่ ง่ายกว่าการทำซ้ำ\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

หรือใช้แมวพร้อมกับ here-doc:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.