Je voudrais modifier un fichier sur place en ajoutant une ligne, seulement s'il n'existe pas encore pour rendre mon script à l'épreuve des balles.
Normalement, je ferais quelque chose comme:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Il est également possible de le faire via ansible ( line
+ insertafter=EOF
+ regexp
), mais c'est une autre histoire.
Dans vi / ex, je pourrais faire quelque chose comme:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
mais comment puis-je vérifier si la ligne est déjà là (et donc ne rien faire) idéalement sans répéter la même ligne?
Ou peut-être existe-t-il un moyen plus simple de le faire dans l'éditeur Ex?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
c'est une commande , donc le reste de la ligne est un mot shell, PAS une affectation. Par conséquent, contrairement à une affectation de variable (qui n'utilise pas export
), vous avez besoin de guillemets doubles ou elle se cassera sur les espaces . Voir également Comment ajouter correctement un chemin d'accès à PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(oucat
, d'ailleurs)?