У вас есть export worker01="sdg sdh sdi sdj sdk"
, затем вы заменяете =
пробелом, чтобы получить export worker01 "sdg sdh sdi sdj sdk"
. Поля, разделенные пробелами: export
, worker01
, "sdg
, sdh
и т. д.
Наверное, лучше разделить на =
и убрать кавычки, чтобы была только оболочка:
$ while IFS== read -r key val ; do
val=${val%\"}; val=${val#\"}; key=${key#export };
echo "$key = $val";
done < vars
worker01 = sdg sdh sdi sdj sdk
worker02 = sdg sdh sdi sdj sdm
worker03 = sdg sdh sdi sdj sdf
key
содержит имя переменной, val
значение. Конечно, на самом деле это не анализирует ввод, а просто удаляет двойные кавычки, если они там есть.
Кто сказал, что нужно вообще файлы менять? ☺
find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' | while read -r i do printf '[Service]\nUser=%s\n' 'Bar' > ${i}.d/change-user.conf done
Таким образом несколько проще получить определение ванильного сервиса.
rm -- /etc/systemd/service/myapp.*.service.d/change-user.conf
Сделать все это одним файлом , применимым ко всей группе сервисов, — это, конечно, простое упражнение по использованию жестких ссылок.
install -d /etc/systemd/temp printf '[Service]\nUser=%s\n' 'Bar' > /etc/systemd/temp/change-user.conf find /etc/systemd/service/ -maxdepth 1 -name 'myapp.*.service' | while read -r i do ln /etc/systemd/temp/change-user.conf ${i}.d/change-user.conf done
Это, конечно, официальный способ сделать такого рода вещи с пакетом -, поставляемым и во время выполнения -, сгенерированными модулями, кроме того. Вы должны , а не изменять такие юнит-файлы.
systemd.unit
. справочные страницы systemd. freedesktop.org. с помощьюsed
:
sed -i 's/^User=Foo$/User=Bar/' /etc/systemd/service/myapp.*.service