Мы сделаем это, заставив sed
работать с файлом sub.txt, чтобы сгенерировать sed
код, который будет работать с входными данными для получения различных выходных файлов, как показано здесь:
$ sed -ne '
1i\
h
s|\(.\)[[:blank:]*->[[:blank:]]*\(.\)|g;s/\1/\2/gw./converted.\1_\2.txt|p
'./sub.txt | sed -nf -./input.file
Получаем выходные файлы с именами converted.A_Y.txt
, converted.B_V.txt
и т. д. Первый вызов sed
генерирует код sed
на лету на основе преобразований, упомянутых во входных данных sub.txt, и использует его для запуска второго вызова sed
на входных данных.
Предположим, что в файле sub.txt используется односимвольная транслитерация и символы не являются регулярными выражениями для sed ни в правой, ни в левой части команды s///
команды sed
.
После того, как вы создадите forksomething@.service
и запустите systemctl daemon-reload
один раз, systemd
будет готов к запуску любого количества forksomething@anything.service
служб без дальнейшей перезагрузки демона -.
На самом деле ваш forksomething@.service
на самом деле является шаблоном службы . Вы можете использовать часть после @
в имени экземпляра в качестве параметра в своем шаблоне. Например, если вы определяете свой сервис следующим образом:
[Service]
Type=forking
ExecStart=/usr/local/bin/forksomething "%i"
, а затем запустите:
systemctl daemon-reload
systemctl start forksomething@1.service
systemctl start forksomething@2.service
systemctl start forksomething@3.service
, тогда systemd выполнит для вас команды /usr/local/sbin/forksomething 1
, /usr/local/sbin/forksomething 2
и /usr/local/sbin/forksomething 3
.
Если вы хотите, чтобы первые два экземпляра постоянно запускались при каждой загрузке с этого момента, вам нужно будет только произнести systemctl enable forksomething@1.service
и systemctl enable forksomething@2.service
. Эти команды автоматически создадут соответствующие символические ссылки на соответствующий каталог /etc/systemd/system/<whatever>.target.wants/
.
Экземпляр шаблона службы можно вызвать, просто попытавшись запустить его; символические ссылки нужны только в том случае, если вы хотите, чтобы он был постоянно связан с каким-либо целевым устройством (, обычно default.target
или multi-user.target
, если вы хотите, чтобы что-то запускалось при загрузке,хотя вы можете указать Before=some.target
в своем шаблоне службы, если хотите, чтобы экземпляры были связаны с какой-либо другой целью ).