Intereting Posts
Приложения GTK выглядят плохо Настройки питания оптического привода: подождите дольше, прежде чем вращаться вниз Заменить команду как переменную в скрипт bash Разделить на несколько файлов на основе первого столбца при согласовании числовых диапазонов в другом столбце с awk Правило Udev hwdb не работает Запустите сценарий, который отображает окно X из правила udev / var / run / lircd не создается при запуске в качестве службы systemd Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки autofs ~ / .hidden: Нет такого файла или каталога Как сохранить код в скрипте Bluetooth-динамики: звуковые кнопки не работают Linux VPS-хост с графическим интерфейсом с использованием RDP (не VNC) «Cut» зависает при использовании «tail -f» в сочетании с «tr», Нужна помощь в моем скрипте для замены команды Является ли это возможным? Три моста Firewall с OpenBSD 6.0 с одним сервером OpenBSD?

Как добавить несколько строк в файл с помощью bash, с символом «-» перед строкой

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

Большинство команд, которые принимают --foo как параметр, также принимают -- само по себе как маркер «end of options, start of arguments», чтобы вы могли:

 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 

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

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