我正在尝试将文件写入磁盘,作为systemd单元文件的ExecStartPre
命令的一部分。
这就是我正在使用的:
[Unit]
Description=My service
[Service]
Restart=always
StartLimitInterval=0
ExecStartPre=/usr/bin/cat <<EOFDefaults > /tmp/test
option1=value1
option2=value2
EOFDefaults
ExecStart=/run/some/command
由于这是一个多行命令,因此在使用systemd-analyze verify myservice.service
进行测试时会出现以下错误。
所以,我试图逃避多行:
[Unit]
Description=My service
[Service]
Restart=always
StartLimitInterval=0
ExecStartPre=/usr/bin/cat <<EOFDefaults > /tmp/test \
option1=value1 \
option2=value2 \
EOFDefaults
ExecStart=/run/some/command
测试单元文件时,出现以下错误:Invalid escape sequences in command line:
如何使用cat将多行内容作为systemd单元文件命令的一部分写入文件?
答案 0 :(得分:2)
你不是。 请参阅Command lines上的文档部分:
此语法旨在与shell语法非常相似,但只能理解以下段落中描述的元字符和扩展。具体来说,使用&#34;&lt;&#34;,&#34;&lt;&lt;&#;&#34;,&#34;&gt;&#34;和&#34;&gt;&gt;&#重定向34;,管道使用&#34; |&#34;,使用&#34;&amp;&#34;在后台运行程序,以及shell语法的其他元素不受支持。
您可以通过首先使用以下内容调用shell来完成此操作:
ExecStartPre=/bin/sh -c '/usr/bin/cat <<EOFDefaults > /tmp/test \
option1=value1 \
option2=value2 \
EOFDefaults'
然而它变得非常混乱。
我要做的是将它放在一个单独的shell脚本中,并从服务定义中调用它。一般情况下,最好尽量保持服务定义。