問題は次のようによく似ています。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
良いオプションではありません。自動化されたスクリプトに入れたいです。
答え1
--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
またはこちらのドキュメントでcatを使用してください。
cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF