0
我有一個非常簡單的bash腳本重置我的iptables的規則。它從另一個包含bash變量的「Config-File」中讀取配置參數。因此我使用關鍵字「來源」。Bash腳本從源文件讀取變量顯示沒有這樣的文件或目錄錯誤
我使用穩定軟件包運行debian服務器。 是bash版本運行
GNU的bash,版本30年3月4日(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
這裏bash腳本的內容:
#!/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
大家有一個想法,爲什麼我得到這個錯誤?
可能是回車在任何文件中的字符。運行'od -c filename'並查找'\ r'字符。另外,'eval'沒有用處,分號沒用,'!/ bin/bash'中缺少'#'。如果你發現回車符,用'dos2unix filename'將文件轉換成Unix行尾。 – Jens
嘗試添加一個「else echo」無配置文件!「;退出1'到'if'語句,以查看文件是否被找到。我懷疑配置沒有被讀取,並且腳本繼續使用空變量。您還可以添加一個'echo「$ IPTABLES」'和'echo「$ IP6TABLES」'來檢查'source'是否按預期工作。 – Socowi
Hi Jens!非常感謝您的超快速答案。問題是config-File中的一些'\ r \ n'字符。使用dos2unix轉換文件爲我工作。 –