Область действия внутри heredoc в bash, моя переменная $ PORT не работает - PullRequest
0 голосов
/ 12 сентября 2018

Я ничего не могу найти в Интернете по этому поводу, но я могу обнаружить, что не должен использовать кавычки на EOT, но в моем случае я не могу, если кто-то может мне здесь помочь, это было бы здорово. .........

Это часть скрипта для установки новых Debian установок

ПРОБЛЕМА: Я не получаю доступ к $ PORT внутри cat/EOT here-document, когда он запускается.

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 голосов
/ 12 сентября 2018

Я прошу прощения за то, что уделил время людям по этому вопросу, это была ошибка новичка, что я читал имя файла в grep, а не фактический file (/etc/iptables.test.rules), поэтому я конкатенировал множитель HERE-DOCраз внутри фактического файла, который iptables-save пытался использовать с $ PORT duplicates, и, конечно, он терпел неудачу со всем дополнительным кодом (бред).

Проблема решена ...... извините из Исландии.

Таким образом, я не создал / закодировал проверку, был ли установлен iptables и существует ли файл /etc/iptables.test.rules, и поэтому я добавлял двойной код iptables в файл, уже содержащий код, который я писал.

Спасибо @CharlesDuffy за ваше время и советы / рекомендации

0 голосов
/ 12 сентября 2018

Попробуйте использовать, так как это двойной ответ на этот вопрос :

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

...