запрет одинарных кавычек в сценарии bash

ОБНОВЛЕНИЕ

Я упустил важную деталь -, которую вы хотите перенаправить на ту же машину . SuSEFirewall2 на самом деле не поддерживает это .

Таким образом, вы либо создаете псевдоним интерфейса, либо перенаправляете с вашего реального интерфейса на псевдоним; или вы помещаете свои существующие iptablesправила в соответствующий скрипт.

Это может быть /etc/sysconfig/network/scripts/firewallв разделе «net -reconfig -done»:

           net-reconfig-done)
                    [ "$FIREWALL" = 'yes' ] || exit 2
                    sfw2_active || exit 3
                    /sbin/SuSEfirewall2 --bootunlock start

                    /usr/sbin/iptables...YOUR_RULES...

, но вы рискуете перезаписать его при следующем обновлении. Или вы подготавливаете собственный исполняемый скрипт запуска в init.d (, который вы можете скопировать из одного из существующих ), предполагая, что вы находитесь на уровне выполнения 5

# runlevel
5

тогда вы будете использовать rc5.d и создадите скрипт в

/etc/init.d/rc5.d/S55Redirector

Ключевой частью сценария будет:

case "$1" in
    start)
        echo -n "Applying redirect rules"
        /usr/sbin/iptables...YOUR_RULES...
        /usr/sbin/iptables...YOUR_RULES...
        /usr/sbin/iptables...YOUR_RULES...
        rc_status -v
        ;;

СТАРЫЙ ОТВЕТ

Самый быстрый способ убедиться в том, что это работает, — установить его из yast.

Из корневой оболочки:

yast

в меню слева выберите «Безопасность»; от того, что справа, «Брандмауэр».enter image description here

В «разрешенных услугах» добавьте услуги, которые вам нужны, чтобы они были приняты.

enter image description here

В зависимости от конкретной версии SuSE перейдите к пункту «Маскарад». Там вы должны указать хост назначения, а также порт назначения.

Как назло, мой единственный компьютер LEAP мой единственный другой компьютер LEAP находится дома, в настоящее время не работает, а другой не является брандмауэром, поэтому я не могу подтвердить или предоставить третий снимок экрана..

Я подозреваю, что вы правильно поняли пользовательские правила, но забыли разрешить входящие пакеты в файле конфигурации (он должен идти в/etc/sysconfig/SuSEfirewall2.d/services). Если это не сработает,вы можете вернуться ко мне (lserni@gmail.com )после четверга, когда я вернусь домой.

3
11.10.2019, 21:28
1 ответ

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

-i) inc="$2"    
  #echo 'inc: ' $inc
  include="--include=\*.${inc}" # file type to include

Подстановочный знак *не раскрывается внутри двойных кавычек, что означает, что он уже экранирован (кавычками ), это означает, что экранирование обратной косой черты также будет рассматриваться буквально.

Вы можете изменить его на:

-i) include="--include=*.${2}";;

Здесь вы можете увидеть, как экранирование обратной косой черты обрабатывается в различных сценариях:

$ echo \*
*
$ echo "\*"
\*
$ echo "\$"
$

В первом примере он удаляется после побега*
Во втором примере экранировать *не нужно, поэтому он остается буквально
В третьем примере необходимо экранировать $(, который может раскрываться внутри одинарных кавычек ), поэтому он удаляется.

6
27.01.2020, 21:13

Теги

Похожие вопросы