在bash的Heredoc范围内,我的$ PORT变量不起作用

时间:2018-09-11 23:05:03

标签: bash shell heredoc

我在网上找不到与此有关的任何内容,但是我发现我不应该在EOT上使用引号,但就我而言,如果有人可以在这里帮助我,我就不会这样做。很棒..........

这是设置新Debian安装的脚本的一部分

问题: 运行时,我无法访问cat/EOT here-document内的$ PORT。

setUPiptables()
{

    if ! grep -e '-A INPUT -p tcp --dport 80 -j ACCEPT' /etc/iptables.up.rules
    then
        cat << EOT >> /etc/iptables.test.rules
        *filter


        IPTABLES-CODE-HERE

        # Allows SSH connections
        # The --dport number is the same as in /etc/ssh/sshd_config
        -A INPUT -p tcp -m state --state NEW --dport $PORT -j ACCEPT


        IPTABLES-CODE-HERE

        COMMIT
EOT
        sleep 5
        /sbin/iptables-restore < /etc/iptables.test.rules || exit 127
        sleep 5
        /sbin/iptables-save > /etc/iptables.up.rules || exit 127
        sleep 3
        printf "#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules" > /etc/network/if-pre-up.d/iptables
        chmod +x /etc/network/if-pre-up.d/iptables
        sleep 6
    fi
}

问题:

您能否在$PORT cat代码中找到/看到iptables的问题?

2 个答案:

答案 0 :(得分:1)

尝试使用,因为这是此question的重复答案:

cat <<'EOT' >> /etc/iptables.test.rules

答案 1 :(得分:1)

我为在这个问题上花点时间表示歉意,这是一个初学者的错误,因为我正在读取grep中的文件名,而不是实际的file/etc/iptables.test.rules),所以我在HERE-DOC试图与$ PORT iptables-save一起使用的实际文件中多次将duplicates串联在一起,当然,它会因所有额外的代码而失败(乱码)。

问题已解决……冰岛,抱歉。

因此,我没有创建/编码检查是否设置了iptables且文件/etc/iptables.test.rules是否存在,因此我将双iptables附加到已经包含我正在编写的代码的文件中。 / p>

感谢@CharlesDuffy的时间和建议/指导