Come aggiungere più righe a un file con bash, con “-” davanti alla stringa


9

Domanda molto simile a Come aggiungere più righe a un file con bash ma voglio iniziare il file con --, e anche aggiungere al file, se possibile.

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

Il problema sta iniziando il file con "-" mi dà un:

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

C'è un modo per sfuggire al --? Ci sono alternative? Non sono sicuro di come utilizzare più righe usando echo, e catnon è una buona opzione, mi piacerebbe averlo in uno script automatizzato.

Risposte:


17

La maggior parte dei comandi che accettano --foocome opzione accetta anche --da sola come marcatore "fine delle opzioni, inizio degli argomenti", quindi puoi fare:

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

Ma la risposta più specifica al tuo esempio esatto è che il primo argomento di printf è un identificatore di formato e stai rendendo le cose più difficili del necessario non usando printf per le sue capacità di formattazione. Questo sarebbe un modo migliore per fare quello che vuoi:

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

Questo dice a printf di prendere ogni argomento che riceve e stamparlo, seguito da una nuova riga. Più facile che ripetere \nte stesso ed evita il --problema principale che stavi affrontando. E rimuove la necessità di sfuggire a qualsiasi %segno che le stringhe potrebbero contenere.

Per quanto riguarda come fare più righe con echo, è possibile utilizzare:

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

O, molto più portabilmente:

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

O usando cat insieme a qui-doc:

cat >>.rspec-test <<EOF
--no-color
--format-doc
--no-profile
EOF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.