screen внутри systemd требует 777 разрешений на /run/screen, но 775 снаружи

Использование вспомогательной функции:

concat () (
    IFS=
    printf '%s' "$*"
)

printf '"%s"\n' "$(concat "foo" \
    "bar" \
    "baz" )"

Это выведет

"foobarbaz"

Или, сначала поместив строковые биты аргумента в массив, а затем отдельно создав фактический аргумент (, предполагается использование оболочки с массивами):

concat () (
    IFS=
    printf '%s' "$*"
)

args=(
    "foo"
    "bar"
    "baz"
)

concat_args=$( concat "${args[@]}" )

printf '"%s"\n' "$concat_args"

То же, что и выше, но с оболочкой POSIX.:

concat () (
    IFS=
    printf '%s' "$*"
)

set -- \
   "foo" \
   "bar" \
   "baz"

concat_args=$( concat "$@" )

printf '"%s"\n' "$concat_args"

Обратите внимание, что тело функции concatвыполняется в своей собственной подоболочке (, что и (...)делает ), что означает, что изменение в IFSявляется локальным для функции.

Обоснование использования "$*"вместо "$@"в функции чисто для эстетики. "$*"расширится до одиночной строки, которая printfбудет напечатана. Фактическая конкатенация в этом случае выполняется расширением оболочки $*без разделителя (пустым$IFS). Вместо этого использование "$@"расширило бы количество отдельных строк, к которым printfнеоднократно применяла бы свою строку формата. Конкатенация в этом случае будет побочным эффектом использования конкретной строки формата с printf.

Или та же идея (создание фактической строки аргумента отдельно ), но без этой вспомогательной функции,

arg=\
"foo"\
"bar"\
"baz"

printf '"%s"\n' "$arg"

printf '"%s"\n'выше во всех случаях будет заменен вашим some_command --flag.

1
20.12.2019, 19:43
1 ответ

У меня была та же проблема, когда я пытался настроить сервер minecraft под systemd на Debian 9. Насколько мне известно, никаких исправлений нет, но вот частичная работа -. Я добавил эти строки в файл конфигурации юнита:

PermissionsStartOnly=true
ExecStartPre=/bin/chmod 777 /run/screen

Таким образом, это позволит настроить разрешения, необходимые для запуска службы. И я могу снова установить разрешения на 775 всякий раз, когда мне нужно использовать экран для себя.

1
10.07.2020, 03:59

Теги

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