缩进这里文档

Indenting here doc

我有一个安装 jackett 的函数,该函数包含编写服务文件的 heredoc。

问题是我需要缩进 EOF 但它不起作用,我已经尝试了多次迭代代码和示例 none 似乎有效。

我在 EOF 附近尝试了以下有无“”,'',- 的方法

cat <<-EOF > /etc/systemd/system/jackett.service
EOF

cat > /etc/systemd/system/jackett.service <<-EOF
EOF

cat <<-EOF
EOF > /etc/systemd/system/jackett.service 

这是我写的实际代码。

sudo apt-get update -y

sudo apt-get install -y libcurl4-openssl-dev bzip2 mono-devel -y

cd /tmp

wget https://github.com/Jackett/Jackett/releases/download/v0.8.832/Jackett.Binaries.Mono.tar.gz

sudo tar -xvf Jackett*

sudo mv Jackett/* /opt/jackett

sudo chown -R plex-admin:plex-admin /opt/jackett

cat <<-EOF > /etc/systemd/system/jackett.service
    [Unit]
    Description=Jackett Daemon
    After=network.target

    [Service]
    User=$Admin
    Restart=always
    RestartSec=5
    Type=simple
    ExecStart=/usr/bin/mono --debug /opt/jackett/JackettConsole.exe --NoRestart
    TimeoutStopSec=20

    [Install]
    WantedBy=multi-user.target
EOF

sudo systemctl enable jackett

sudo service jackett start

请帮忙。

编辑 1

根据 Charles Duffy 的评论

我的测试文件是

#!/bin/bash

cat -A  <<-EOF
    [Unit]
    Description=Jackett Daemon
    After=network.target

    [Service]
    User=$Admin
    Restart=always
    RestartSec=5
    Type=simple
    ExecStart=/usr/bin/mono --debug /opt/jackett/JackettConsole.exe --NoRestart
    TimeoutStopSec=20

    [Install]
    WantedBy=multi-user.target
EOF

运行 bash 脚本时的输出是

    [Unit]$
    Description=Jackett Daemon$
    After=network.target$
$
    [Service]$
    User=$
    Restart=always$
    RestartSec=5$
    Type=simple$
    ExecStart=/usr/bin/mono --debug /opt/jackett/JackettConsole.exe --NoRestart$
    TimeoutStopSec=20$
$
    [Install]$
    WantedBy=multi-user.target$

编辑 2

所以 atom 有一个很酷的功能,叫做 'convert all spaces to tabs' 我现在选择了我的 cat 函数,下面是带有 -A 的输出。

[Unit]$
Description=Jackett Daemon$
After=network.target$
$
[Service]$
User=$
Restart=always$
RestartSec=5$
Type=simple$
ExecStart=/usr/bin/mono --debug /opt/jackett/JackettConsole.exe --NoRestart$
TimeoutStopSec=20$
$
[Install]$
WantedBy=multi-user.target$

而且有效!

我在atom中选择了我的cat语句然后去了;包 > 空格 > 将空格转换为制表符。

带有 -A 的 cat 函数输出如下。

[Unit]$
Description=Jackett Daemon$
After=network.target$
$
[Service]$
User=$
Restart=always$
RestartSec=5$
Type=simple$
ExecStart=/usr/bin/mono --debug /opt/jackett/JackettConsole.exe --NoRestart$
TimeoutStopSec=20$
$
[Install]$
WantedBy=multi-user.target$

而且有效!