我在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
放在我的应用程序代码中“解释”一样?
答案 0 :(得分:2)
如您所料,Systemd在环境变量定义中接受\n
。您无需执行和特殊解析,只需在需要的地方添加适当的\n
并转义实际的换行符。 Systemd应该处理其余部分并将它们转换为换行字面值。在你的情况下,这看起来像这样:
JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----\n\
MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V\n\
2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/\n\
...\n\
-----END FOO BAR KEY-----"
答案 1 :(得分:0)
你不应该解释(解析?)你的结尾的换行符,这应该全部自动发生,as explained here,这意味着在每一行的末尾添加'\ n'应该做的伎俩