Ubuntu - “sudo iptables”命令在终端中工作,在 bash 脚本中不起作用

Ubuntu - “sudo iptables”命令在终端中工作,在 bash 脚本中不起作用

我使用一个简单的终端命令向 iptables 添加一条规则,并且执行时没有问题:

sudo iptables -A OUTPUT -p tcp -m string --string "facebook.com" --algo kmp -j REJECT

当我在 bash 脚本中运行该命令时,它返回sudo: ./script.sh: command not found

该脚本如下所示:

#!/bin/bash

sudo iptables -A OUTPUT -p tcp -m string --string "facebook.com" --algo kmp -j REJECT

答案1

如果脚本不可执行,则必须使用适当的 shell(例如/bin/sh或 )来调用它/bin/bash。这将忽略 shebang 行,并且脚本将使用调用 shell 执行。

sudo /bin/sh ./script.sh

要按照 OP 的预期运行脚本,您必须授予脚本执行权限。

chmod +x script.sh
sudo ./script.sh

在本例中,脚本是使用 shebang 行的 shell 执行的。

相关内容