Я хотел бы отредактировать файл на месте, добавив строку, только если она еще не существует, чтобы сделать мой сценарий пуленепробиваемым.
Обычно я бы сделал что-то вроде:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Это также возможно сделать через ansible ( line
+ insertafter=EOF
+ regexp
), но это другая история.
В vi / ex я мог бы сделать что-то вроде:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
но тогда как я могу проверить, что линия уже существует (и, следовательно, ничего не делать) в идеале, не повторяя ту же строку?
Или, может быть, есть какой-то более простой способ сделать это в редакторе Ex?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
это команда , поэтому остальная часть строки является словом оболочки, а НЕ присваиванием. Следовательно, в отличие от присваивания переменной (которая не использует export
), вам нужны двойные кавычки, иначе они будут разбиты на пробел . Также см. Как правильно добавить путь к PATH .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(илиcat
, в этом отношении)?