如何打破复杂的 ExecStart 行同时仍保留中间的注释?

如何打破复杂的 ExecStart 行同时仍保留中间的注释?

我需要将一长行命令行放入 systemd ExecStart 条目中。我知道我可以通过在每个非最后一行末尾添加反斜杠来将一长行拆分为多行。

但是,我该如何用注释记录这些部分呢?例如,下面的代码不起作用:

ExecStart=/bin/ssh -NT -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=3 \
# local tunnel for this
    -L 172.16.12.34:10001:localhost:10001 \
# remote tunnel for that
    -R3128:127.0.0.1:3128 \
    someserver

如果我删除带有“#”的行,它就可以工作,但我会丢失文档。如果对长命令行的各个部分进行细粒度的现场文档记录根本是不可能的,那么有哪些有用的替代方案?

答案1

我认为这是@sven 建议的:

#
# Listen locally on port 10001 and tunnel it to someserver
# Listen on someserver port 3128 and tunnel it to localhost
#
ExecStart=/bin/ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=60 \
    -o ServerAliveCountMax=3 \
    -L 172.16.12.34:10001:localhost:10001 \
    -R3128:127.0.0.1:3128 \
    someserver

在我看来并不太糟糕。

答案2

不要忘记\行末的注释。Systemd 会剪切它们,并且不会在命令中使用

ExecStart=/bin/ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=60 \
    -o ServerAliveCountMax=3 \
    # local tunnel for this \
    -L 172.16.12.34:10001:localhost:10001 \
    # remote tunnel for that \
    -R3128:127.0.0.1:3128 \
    someserver

答案3

  1. 编写一个脚本。
  2. 没有人阻止你写下这句话然后留下额外的评论来解释它。

相关内容