使用systemd扩展环境变量中的多个单词

问题描述 投票:0回答:1

我在使用 systemd 的环境文件时遇到问题: 定义一个变量,如

#... many more
CHECK_SELECTION=--no-check-a --no-check-b --no-check-c
#... many more

systemd
单元的环境文件中,我遇到问题:

  1. 当指定
    $CHECK_SELECTION
    时,它会在systemd 228中逐字传递
  2. 指定
    ${CHECK_SELECTION}
    时,这三个单词将作为 one 参数传递,导致语法错误。

手册页

systemd.service(5)
但是声称它应该可以工作(正如我读到的那样):

       Use "$FOO" as a separate word on the command line, in which case it
       will be replaced by the value of the environment variable split at
       whitespace, resulting in zero or more arguments. For this type of
       expansion, quotes are respected when splitting into words, and
       afterwards removed.

我的

ExecStart
看起来像这样:

ExecStart=/usr/bin/my-prog \
--many-more-options \
${CHECK_SELECTION} --notification-template=${NOTIFICATION_TEMPLATE} \
${OTHER_OPTIONS}

那么到底出了什么问题呢? 难道我在

systemd
中发现了一个错误(因为空格来自续行)?

variables environment-variables systemd
1个回答
0
投票

问题已解决(实际上是由用户困惑引起的):

我开始对像

$VAR
这样的选项使用
--option=$VAR
语法,当意识到该值没有被替换(并且程序因语法错误而中止)时,我用 ${VAR} 替换了
all
变量出现。

根据文档

${VAR}
不会拆分单词。

因此,解决方案是在

周围没有空格且不需要或不希望进行分词的情况下使用 ${VAR},在需要分词的情况下使用
$VAR
(并且周围有空格以启用替换) ).

© www.soinside.com 2019 - 2024. All rights reserved.