我使用一个简单的终端命令向 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 执行的。