Я хотів би відредагувати файл на місці, додавши рядок, лише якщо він ще не існує, щоб зробити мій скрипт захисним.
Зазвичай я б робив щось на кшталт:
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
, з цього приводу)?