Linux
如何在 shell 腳本中包含目錄中的所有文件(在本例中為 /etc/init.d/iptables)
我
/etc/init.d/iptables start|stop|restart
在不同的 ubuntu 伺服器上有一個腳本(這是一個普通的 shell 腳本)對於每個新服務,我必須編輯並插入一行來打開一個埠。這導致在不同的機器上有許多不同版本的 init.d 腳本。
是否可以自動包含所有文件
/etc/iptables/include.d/
?目標是/etc/init.d/iptables的啟動函式中應該只有一行,例如
include /etc/iptables/include.d/*
在添加一個附加文件之後,
/etc/iptables/include.d/
我只想說/etc/init.d/iptables restart
**編輯:**正如 Saurabh 指出的那樣,當命令需要特定順序時,這可能會導致問題。高級設置可能有不同的目錄,例如:
/etc/iptables/include01.d/ /etc/iptables/include02.d/ /etc/iptables/include03.d/
並像這樣包括它們:
包括 /etc/iptables/include01.d/* ...也許一些程式碼在主文件中... 包括 /etc/iptables/include02.d/* 包括 /etc/iptables/include03.d/*
將以下行添加到您的 init.d 腳本中。
run-parts --report /etc/iptables/include.d
它將作為 shell 腳本執行目錄中的所有內容(需要可執行)。
如果您只想執行以 .port 結尾的文件,則可以使用以下內容:
run-parts --regex '\.port$' /etc/iptables/include.d/
如果您想確保順序正確,您可以命名文件:
10_web.port 20_ssh.port etc..
for f in /etc/iptables/include.d/* . $f done
注意點和 %f 之間的空格
Saurabh 是對的——這不會像你想要的那樣工作,但使用一些命名約定,例如 10-xxx、20-yyy 等等,它可能是易於管理的。