Gostaria de editar um arquivo no local anexando uma linha, apenas se ainda não existir, para tornar meu script à prova de balas.
Normalmente eu faria algo como:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Também é possível fazer isso via ansible ( line+ insertafter=EOF+ regexp), mas é outra história.
No vi / ex, eu poderia fazer algo como:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
mas como verificar se a linha já está lá (e, portanto, não faço nada) idealmente sem repetir a mesma linha?
Ou talvez haja alguma maneira mais fácil de fazer isso no editor Ex?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
exporté um comando , portanto, o restante da linha é uma palavra shell, NÃO uma atribuição. Portanto, diferentemente de uma atribuição de variável (que não usa export), você precisa de aspas duplas ou ela será quebrada no espaço em branco . Consulte também Como adicionar corretamente um caminho ao PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...(oucat, nesse caso)?