Me gustaría editar un archivo en el lugar agregando una línea, solo si aún no existe para que mi script sea a prueba de balas.
Normalmente haría algo como:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
También es posible hacerlo a través de ansible ( line
+ insertafter=EOF
+ regexp
), pero es otra historia.
En vi / ex podría hacer algo como:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
pero entonces, ¿cómo puedo verificar si la línea ya está allí (y, por lo tanto, no hacer nada) idealmente sin repetir la misma línea?
¿O tal vez hay alguna manera más fácil de hacerlo en 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
es un comando , por lo que el resto de la línea es una palabra de shell, NO una asignación. Por lo tanto, a diferencia de una asignación variable (que no usa export
), necesita comillas dobles o se romperá en espacios en blanco . Consulte también Cómo agregar correctamente una ruta a PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(ocat
, para el caso)?