So hängen Sie mehrere Zeilen mit bash an eine Datei an, wobei "-" vor der Zeichenfolge steht

9

Frage sehr ähnlich wie Wie man mehrere Zeilen mit Bash an eine Datei anfügt, aber ich möchte die Datei mit beginnen --und wenn möglich auch an die Datei anhängen.

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

Das Problem beim Starten der Datei mit "-" gibt mir ein:

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

Gibt es einen Weg, dem zu entkommen --? Gibt es Alternativen? Ich bin mir nicht sicher, wie ich mehrere Zeilen verwenden soll echo, und es catist keine gute Option. Ich möchte es in einem automatisierten Skript haben.

SuckerForMayhem
quelle

Antworten:

17

Die meisten Befehle, die --fooals Option akzeptiert werden, akzeptieren auch --von sich aus als Markierung "Ende der Optionen, Beginn der Argumente". Sie können also Folgendes tun:

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

Die spezifischere Antwort auf Ihr genaues Beispiel ist jedoch, dass das erste Argument für printf ein Formatbezeichner ist und Sie die Dinge schwieriger als nötig machen, indem Sie printf nicht für seine Formatierungsfähigkeiten verwenden. Dies wäre ein besserer Weg, um das zu tun, was Sie wollen:

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

Das sagt printf, dass es jedes Argument nehmen und drucken soll, gefolgt von einer neuen Zeile. Einfacher als sich selbst zu wiederholen \n, und es vermeidet das --Hauptproblem, mit dem Sie konfrontiert waren. Und es entfällt die Notwendigkeit, sich jeglichen %Anzeichen zu entziehen , die Ihre Saiten enthalten könnten.

Für das Erstellen mehrerer Zeilen echokönnen Sie Folgendes verwenden:

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

Oder viel tragbarer:

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

Oder verwenden Sie Katze zusammen mit einem Here-Doc:

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