gpt4 book ai didi

systemd,环境文件中的多行变量,其中新行很重要

转载 作者:行者123 更新时间:2023-12-01 17:39:41 26 4
gpt4 key购买 nike

我在 debian jessie 上使用 systemd 来控制一个服务,我通过 EnvironmentFile=/etc/default/myservice 文件向该服务提供环境变量

在这个文件中我有一个变量,它是公钥

  JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----
MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V
2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/
...
-----END FOO BAR KEY-----"

这样说并不能让 systemd 满意,它会报告错误(尽管在同一个文件的 bash 中执行 source 可以正常工作)

systemd 的文档报告说,您可以通过以 \ 结尾每个文件来拥有多行变量,但它连接每一行(因此我的程序接收到整个文件)行,这不再是有效的公钥)

是否有已知的方法来保留行尾?不诉诸黑客,比如将我在应用程序代码中“解释”的 \n

最佳答案

systemd.exec documentation中的声明在环境文件中,“支持 C 转义符,但不支持大多数控制字符。 “\t”和“\n”可用于在EnvironmentFile=中插入制表符和换行符。”是完全错误的。相反,允许的引号和转义与 POSIX shell 中的相同。 。与 sh 中一样,用单引号或双引号括起来的多行值将在环境中变成多行值;你不需要 \n\t,它们在 sh 中没有意义(没有引号,它们被解释为 n t;在引号内,它们被解释为 \n\t。它们永远不会成为换行符和制表符)。

如果您以双引号或不带引号的 \ 结束一行,那么这是一个续行,并且换行符将被丢弃,就像在 sh 中一样。

我打开了PR 21908修复此文档。

关于systemd,环境文件中的多行变量,其中新行很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35909874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com