2017-04-18 2 views
0

私はIpTablesのルールをリセットする非常に簡単なbashスクリプトを持っています。 bash変数を含む別の "Config-File"から構成パラメーターを読み取ります。したがって、私はキーワード "source"を使用します。Bashスクリプトの読み込みソースファイルの変数が表示されないこのようなファイルやディレクトリのエラーはありません

私は安定版パッケージでdebian Serverを実行しています。 バッシュはバージョンで実行されている

GNUのbashのバージョン4.3.30(1)-release(x86_64版-pc-linux-gnuのよう)

私は、debian-サーバー上でスクリプトを実行すると出力プリント次のテキスト:

: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryptables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
: No such file or directoryp6tables 
ここ

バッシュスクリプトの内容:

#!/bin/bash 

CONFIG=../config/easywall.cfg 

if [ -f $CONFIG ]; 
then 
source $CONFIG 
fi 

eval $IPTABLES -F 
eval $IPTABLES -X 
eval $IPTABLES -t nat -F 
eval $IPTABLES -t nat -X 
eval $IPTABLES -t mangle -F 
eval $IPTABLES -t mangle -X 
eval $IP6TABLES -F 
eval $IP6TABLES -X 
eval $IP6TABLES -t nat -F 
eval $IP6TABLES -t nat -X 
eval $IP6TABLES -t mangle -F 
eval $IP6TABLES -t mangle -X 

exit 0 

と設定、ファイルの内容:

!/bin/bash 
IPTABLES=/sbin/iptables 
IP6TABLES=/sbin/ip6tables 

は誰私はこのエラーを取得する理由を考えていますか?

+1

いずれかのファイルに改行文字を含めることができます。 'od -c filename'を実行し、' \ r'文字を探します。また、 'eval'は役に立たず、セミコロンは役に立たず、'!/ bin/bash'には '#'がありません。キャリッジリターン文字を見つけたら、ファイルを 'dos2unix filename'でUnix行末に変換してください。 – Jens

+0

'else echo"設定ファイルがありません! ";ファイルが見つかったかどうかを確認するために、 'if'文にexit 1を実行します。私は、configが読み込まれていないと思うし、スクリプトは空の変数を続けます。 'echo' $ IPTABLES ''と 'echo" $ IP6TABLES "'を追加して、 'source'が期待どおりに動いたかどうかを調べることもできます。 – Socowi

+0

こんにちはジェンス!あなたの超高速な答えに感謝します。問題は、config-Fileの '\ r \ n'文字の問題です。 dos2unixでファイルを変換すると私にとってはうまくいった。 –

答えて

0

Jensからのコメントは私のために働いた。

まず私はbashスクリプトと設定ファイルの内容を表示するために

od -c filename 

を使用。 bashスクリプトの内容は問題ありませんでしたが、configファイルの内容に多くの

\r\n 

が表示されていました。

でファイルを変換しました
dos2unix filename 

エラーが表示されなくなりました。

関連する問題