Vorrei modificare un file sul posto aggiungendo una riga, solo se non esiste ancora per rendere il mio script a prova di proiettile.
Normalmente farei qualcosa del tipo:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
È anche possibile farlo tramite ansible ( line
+ insertafter=EOF
+ regexp
), ma è un'altra storia.
In vi / ex potrei fare qualcosa del tipo:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
ma allora come posso verificare se la linea è già lì (e quindi non fare nulla) idealmente senza ripetere la stessa linea?
O forse c'è un modo più semplice per farlo in Ex editor?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
è un comando , quindi il resto della riga è una parola shell, NON un compito. Pertanto, diversamente da un'assegnazione variabile (che non usa export
), hai bisogno di virgolette doppie o si romperà su spazi bianchi . Vedi anche Come aggiungere correttamente un percorso a PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(ocat
, del resto)?