Como anexar várias linhas a um arquivo com o bash, com “-” na frente da string

10

Pergunta muito semelhante a Como anexar várias linhas para um arquivo com o bash , mas quero iniciar o arquivo com -- e também acrescentar ao arquivo, se possível.

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

O problema é começar o arquivo com "-" me dá um:

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

Existe uma maneira de escapar do -- ? Existem alternativas? Não sei como fazer várias linhas usando echo , e cat não é uma boa opção, gostaria de tê-lo em um script automatizado.

    
por SuckerForMayhem 28.07.2014 / 23:23

1 resposta

18

A maioria dos comandos que aceitam --foo como uma opção também aceitam -- como marcador "fim de opções, início de argumentos" - assim você pode fazer:

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

Mas a resposta mais específica para o seu exemplo exato é que o primeiro argumento para printf é um especificador de formato, e você está tornando as coisas mais difíceis do que o necessário ao não usar o printf para suas habilidades de formatação. Essa seria uma maneira melhor de fazer o que você quer:

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

Isso diz ao printf para pegar cada argumento e imprimi-lo, seguido por uma nova linha. Mais fácil do que repetir o \n e evita o problema -- que você estava enfrentando. E elimina a necessidade de escapar de qualquer sinal de % que suas strings possam conter.

Quanto a como fazer várias linhas com echo , você pode usar:

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

Ou muito mais portável:

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

Ou usando o cat junto com o here-doc:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
    
por 28.07.2014 / 23:30