Chciałbym edytować plik w miejscu, dodając wiersz, tylko jeśli jeszcze nie istnieje, aby mój skrypt był kuloodporny.
Normalnie zrobiłbym coś takiego:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Można to również zrobić za pomocą ansible ( line
+ insertafter=EOF
+ regexp
), ale to inna historia.
W vi / ex mogłem zrobić coś takiego:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
ale jak mogę sprawdzić, czy linia już tam jest (a więc nic nie robić) idealnie bez powtarzania tej samej linii?
A może istnieje prostszy sposób na zrobienie tego w edytorze Ex?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
jest to polecenie , więc reszta wiersza jest słowem powłoki, a NIE przypisaniem. Dlatego, inaczej niż w przypadku przypisania zmiennej (która nie korzysta export
), potrzebujesz podwójnych cudzysłowów, w przeciwnym razie spowoduje to przerwanie białych znaków . Zobacz także Jak poprawnie dodać ścieżkę do ŚCIEŻKI .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(lubcat
, jeśli o to chodzi)?