LINUX.ORG.RU

bash функции проверки и добавления\изменения строк в файлах

 


0

1

Делаю на баше деплой системы. Есть два действия, которые я не знаю как реализовать.

  1. Есть темплейты типа ~/myscript/templates/etc/fstab. Внутри темплейта есть строки, которые нужно добавить в fstab. Сейчас это
cat ~/myscript/templates/etc/fstab >> /etc/fstab

Но это не правильно т.к если два раза запустить деплой скрипт, то два раза эти строки добавятся в /etc/fstab. А хотелось бы, чтобы бралась каждая строка из файла темплейта, далее делалась проверка наличия ее в /etc/fstab, если ее нет - тогда добавляем, если есть - игнорим

  1. опять же есть темпейты, как пример: cat ~/myscript/templates/etc/some
SOME_STR = 12

Хотелось бы, чтобы бралась каждая строка из файла темплейта и чекалось, есть ли эта строка в /etc/dest и есть SOME_STR = some, то менялось на SOME_STR = 12, если ее нет - тогда добавление в /etc/dest

★★★★

Чел с тремя звездами на серьезных щщах создает файл катом с двумя перенаправлениями на добавление и спрашивает про какую-то баш функцию, которая будет проверять наличие в итоговом файле содержимого исходного. Это что, 1 апреля сегодня? cp ~/../../fstab /etc/fstab

anonymous
()

Возьми ансибл и модуль template, если тебе не только фстаб.

Он гарантирует идемпотентность (не для всех модулей, н в твоем случае - да)

Если башем - сделай в шаблоне строки под замену и меняй их седом.

PunkoIvan ★★★★
()

Нормальные программы имеют конфигурационные директории типа /etc/cron.d/ куда можно скопировать свой файл целиком и потом удалить не ломая остальные настройки. В systemd даже есть походия функциональность для fstab.

А ещё мне кажется, что ты изобретаешь ansible.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

мне не нужно ansible. Мне нужны две функции замены строк и всё

bryak ★★★★
() автор топика

Но это не правильно

cat ~/myscript/templates/etc/fstab | while read tline; do [ grep  "$tline" /etc/fstab ] || echo "$tline" >> /etc/fstab; done;
anonymous
()
Ответ на: комментарий от anonymous
cat ~/myscript/templates/etc/fstab | while read tline; do [ $(grep "$tline" /etc/fstab) ] || echo "$tline" >> /etc/fstab; done;
anonymous
()

деплой системы

на баше

Проблема где-то между этих строк.

Серьезно, баш слабый для такого уровня задач. Но если очень надо, попробуй очищать файл и накатывать все целиком заново.

filosofia
()
Ответ на: комментарий от anonymous

Чел с тремя звездами

https://www.linux.org.ru/help/rules.md:

Звёзды : ни в коем случае не следует рассматривать рейтинг как показатель некой личной крутизны.

anonymous
()
Ответ на: комментарий от anonymous

в файле

~/myscript/templates/etc/fstab

находятся строки, которые нужно добавить к /etc/fstab, поэтому и двойное перенаправление

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.