Comment ajouter plusieurs lignes à un fichier avec bash, avec «-» devant la chaîne

9

Question très similaire à Comment ajouter plusieurs lignes à un fichier avec bash mais je veux démarrer le fichier avec --, et aussi ajouter au fichier, si possible.

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

Le problème est de démarrer le fichier avec "-" me donne un:

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

Y a-t-il un moyen d'échapper à la --? Existe-t-il des alternatives? Je ne sais pas comment faire plusieurs lignes en utilisant echo, et ce catn'est pas une bonne option, j'aimerais l'avoir dans un script automatisé.

SuckerForMayhem
la source

Réponses:

17

La plupart des commandes qui acceptent --foocomme option acceptent également --en tant que marqueur "fin des options, début des arguments" - vous pouvez donc faire:

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

Mais la réponse plus spécifique à votre exemple exact est que le premier argument de printf est un spécificateur de format, et vous rendez les choses plus difficiles que nécessaire en n'utilisant pas printf pour ses capacités de formatage. Ce serait une meilleure façon de faire ce que vous voulez:

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

Cela indique à printf de prendre chaque argument qu'il obtient et de l'imprimer, suivi d'une nouvelle ligne. Plus facile que de répéter \nvous - même, et cela évite le principal --problème auquel vous faisiez face. Et il supprime le besoin d'échapper à tout %signe que vos cordes pourraient contenir.

Quant à la façon de faire plusieurs lignes avec echo, vous pouvez utiliser:

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

Ou, bien plus facilement:

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

Ou en utilisant cat avec un here-doc:

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