Ubuntu - “sudo iptables”命令在终端中有效,在 bash 脚本中无效

Mar*_*nko 1 linux scripting sudo

我正在使用一个简单的终端命令,它向 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
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 5

如果脚本不可执行,则必须使用适当的 shell 调用它,例如/bin/sh/bin/bash。这将忽略 shebang 行,脚本将与调用 shell 一起执行。

sudo /bin/sh ./script.sh
Run Code Online (Sandbox Code Playgroud)

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

chmod +x script.sh
sudo ./script.sh
Run Code Online (Sandbox Code Playgroud)

在这种情况下,脚本是用 shebang 行的 shell 执行的。