Jak dołączyć wiele linii do pliku za pomocą bash, z ciągiem „-” przed ciągiem


9

Pytanie bardzo podobne do sposobu dodawania wielu wierszy do pliku za pomocą bash, ale chcę go uruchomić --, a także, jeśli to możliwe, dołączyć do pliku.

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

Problem polega na uruchomieniu pliku z „-” daje mi:

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

Czy istnieje sposób na ucieczkę --? Czy są jakieś alternatywy? Nie jestem pewien, jak wykonywać wiele wierszy za pomocą echoi catnie jest dobrą opcją, chciałbym mieć to w automatycznym skrypcie.

Odpowiedzi:


17

Większość poleceń, które akceptują --foojako opcję --, samo w sobie akceptuje również znacznik „koniec opcji, początek argumentów” - dzięki czemu możesz:

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

Ale bardziej szczegółową odpowiedzią na twój dokładny przykład jest to, że pierwszym argumentem printf jest specyfikator formatu, a ty utrudniasz to, niż jest to konieczne, nie używając printf do jego zdolności formatowania. Byłby to lepszy sposób na robienie tego, co chcesz:

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

Oznacza to, że printf musi pobrać każdy otrzymany argument i wydrukować go, a następnie nowy wiersz. Łatwiejsze niż powtarzanie \nsiebie i pozwala uniknąć wiodącego --problemu. I eliminuje potrzebę ucieczki od wszelkich %znaków, które mogą zawierać twoje łańcuchy.

Jeśli chodzi o sposób wykonywania wielu linii echo, możesz użyć:

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

Lub, znacznie bardziej przenośnie:

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

Lub używając kota wraz z dokumentem tutaj:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.