Запускать службу systemd перед тем, что требуется данной цели

Проблема заключается в том, что подстановка вашей команды расширяется до строки с разделителями -из пробелов, и цикл повторяется по всем словам в этой строке. «Слово» — это что-либо, разделенное пробелом, табуляцией или символом новой строки.

Также обратите внимание, что в Bourne -, как и в оболочках, отличных от zsh, эти слова в дальнейшем подлежат генерации имени файла (, также известному как подстановка ), поэтому символы подстановки (и {в некоторых оболочках )также будет проблемой в дополнение к пробелу и табуляции.

lssyscfg -r lpar -m "$system" -F name,lpar_env | cut -d, -f 1 | sort |
while IFS= read -r lpar; do
     echo "$lpar"
done

Здесь используется цикл whileвместо статического цикла for. Тело цикла whileвыполняется в подоболочке (в bash), поэтому переменная lparне будет существовать после окончания тела цикла. Это не проблема, если вы используете переменную только в теле цикла.

Связанные:Понимание «IFS= чтение -r строки»

Другим решением было бы установить IFSна новую строку перед циклом (и сбросить его после этого):

oldIFS=$IFS
IFS=$'\n'    # assumes bash
set -o noglob

for lpar in $( lssyscfg -r lpar -m "$system" -F name,lpar_env | cut -d, -f 1 | sort )
do
    echo "$lpar"
done

set +o noglob
IFS=$oldIFS

Значение по умолчанию $IFSвключает пробелы, поэтому исходный цикл выполняет итерации по неправильным вещам. Я также отключил подстановку имен файлов для цикла, так как в противном случае мы могли бы получить неожиданные результаты, если текст, возвращаемый из lssyscfg, включает шаблоны подстановок имен файлов, как обсуждалось выше.

Этот последний вариант, ИМХО, довольно неэлегантен и совершенно не подходит для команд, которые выводят более нескольких строк вывода.

0
18.09.2020, 03:21
1 ответ

Насколько я понимаю, вы хотите запустить службу до того, как сработает какая-то цель. В этом случае вы можете поместить свою службу в цель, которая находится перед default.target. См.https://www.freedesktop.org/software/systemd/man/bootup.html

Обратите внимание, что все цели на этой странице, находящиеся на одном уровне, выполняются одновременно.

PS :Не могу комментировать вопрос. Это не может быть правильным ответом.

0
18.03.2021, 23:04

Теги

Похожие вопросы