Linux

如何在 shell 腳本中包含目錄中的所有文件(在本例中為 /etc/init.d/iptables)

  • April 16, 2019

/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 等等,它可能是易於管理的。

引用自:https://serverfault.com/questions/41497