Как добавить несколько строк в файл с помощью 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это не хороший вариант, я хотел бы, чтобы это было в автоматизированном сценарии.

SuckerForMayhem
источник

Ответы:

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

Или используя cat вместе с документом here:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
godlygeek
источник