使用带变量的外部文件

时间:2011-03-13 13:32:43

标签: bash

以下是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

3 个答案:

答案 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)")