Як додати кілька рядків до файлу з 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

Або використання кота разом із тут-документом:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.