以下是iptable保存文件,我通过设置一些变量来修改,如下所示。
-A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j REJECT
我还有一个bash脚本,它定义了这个变量,应该使用上面的保存文件调用iptables-restore。
#!/bin/sh
EXTIF="eth0"
INTIF="eth1"
INTIP="192.168.0.1/32"
EXTIP=$(/sbin/ip addr show dev "$EXTIF" | perl -lne 'if(/inet (\S+)/){print$1;last}');
UNIVERSE="0.0.0.0/0"
INTNET="192.168.0.1/24"
现在我需要使用
/sbin/iptables-restore <the content of iptables save file>
在bash脚本中以某种方式将文本文件插入到此脚本的顶部,因此将初始化变量。有没有办法做到这一点?
更新:甚至试过这个
/sbin/iptables-restore -v <<-EOF;
$(</etc/test.txt)
EOF
答案 0 :(得分:2)
使用。 (点)char将一个shell脚本包含到另一个:
#!/bin/sh . /path/to/another/script
答案 1 :(得分:2)
这样的事情:
while read line; do eval "echo ${line}"; done < iptables.save.file | /sbin/iptables-restore -v
或更好的格式:
while read line
do eval "echo ${line}"
done < iptables.save.file | /sbin/iptables-restore -v
字符串的eval强制变量扩展。
答案 2 :(得分:1)
在你的shell脚本中:
. /path/to/variable-definitions
/sbin/iptables-restore < $(eval echo "$(</path/to/template-file)")
或可能
/sbin/iptables-restore < <(eval echo "$(</path/to/template-file)")