2011-03-13 4 views
2

Ce qui suit est un fichier de sauvegarde iptable, que j'ai modifié en réglant certaines variables comme vous le voyez ci-dessous.Utiliser un fichier externe avec des variables

-A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j REJECT 

J'ai aussi un script bash qui définit cette variable et doit appeler iptables-restore avec le fichier de sauvegarde ci-dessus.

#!/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" 

Maintenant je dois utiliser

/sbin/iptables-restore <the content of iptables save file> 

dans le script bash et en quelque sorte insérer le fichier texte sur le dessus pour ce script, de sorte que les variables seront réinitialisés. Y'a-t'il un quelconque moyen d'y arriver?

MISE À JOUR: même essayé ce

/sbin/iptables-restore -v <<-EOF; 

$(</etc/test.txt) 

EOF 
+0

Reposé [ici] (http://serverfault.com/questions/247013/how-to-read-data-from-file-containing-variables). –

Répondre

2

Quelque chose comme ceci:

while read line; do eval "echo ${line}"; done < iptables.save.file | /sbin/iptables-restore -v 

ou plus joliment formaté:

while read line 
    do eval "echo ${line}" 
done < iptables.save.file | /sbin/iptables-restore -v 

L'évaluation d'une chaîne force la substance d'expansion variable.

2

utilisation. (Dot) char d'inclure un script à un autre shell:

 
    #!/bin/sh 
    . /path/to/another/script 
+0

La première ligne de votre exemple est confuse. –

+1

Cela devrait probablement être '#!/Bin/sh' – user123444555621

+0

le texte dans le script n'est pas un autre script mais seulement des données, contenant $ variables. – Pablo

1

Dans votre script shell:

. /path/to/variable-definitions 
/sbin/iptables-restore < $(eval echo "$(</path/to/template-file)") 

ou peut-être

/sbin/iptables-restore < <(eval echo "$(</path/to/template-file)") 
+0

ne fonctionne pas vraiment, il attend toujours l'entrée de l'utilisateur de stdin – Pablo

+0

@Michael: Pouvez-vous éditer votre question pour montrer plus précisément ce que vous essayez de faire et quelles sont les étapes pour y parvenir? Il semble qu'il manque quelque chose dans votre question. –

+0

Oui, en une seconde. – Pablo

Questions connexes