如何在shell脚本中包含目录中的所有文件(在这种情况下为/etc/init.d/iptables)

use*_*096 6 linux unix shell bash 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/*
Run Code Online (Sandbox Code Playgroud)

/etc/iptables/include.d/我添加了一个附加文件之后,我只想说

/etc/init.d/iptables restart
Run Code Online (Sandbox Code Playgroud)

编辑:正如 Saurabh 指出的那样,当命令需要特定顺序时,这可能会导致问题。高级设置可能有不同的目录,例如:

/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/
Run Code Online (Sandbox Code Playgroud)

并像这样包括它们:

    包含 /etc/iptables/include01.d/*
    ...也许一些代码在主文件中......
    包括/etc/iptables/include02.d/*
    包括/etc/iptables/include03.d/*

rkt*_*hkr 11

将以下行添加到您的 init.d 脚本中。

run-parts --report /etc/iptables/include.d
Run Code Online (Sandbox Code Playgroud)

它将目录中的所有内容作为 shell 脚本(需要是可执行的)运行。

如果您只想执行以 .port 结尾的文件,您可以使用以下内容:

run-parts --regex '\.port$' /etc/iptables/include.d/
Run Code Online (Sandbox Code Playgroud)

如果您想确保顺序正确,您可以命名文件:

10_web.port
20_ssh.port
etc..
Run Code Online (Sandbox Code Playgroud)