我试图让我的服务器执行一个简单的 bash 脚本:
#!/bin/bash
echo Hello World
Run Code Online (Sandbox Code Playgroud)
将其保存到 /var/www/script(我无缘无故地将其保存到 Web 目录)后,我尝试使用
exec /var/www/script
Run Code Online (Sandbox Code Playgroud)
这失败返回我没有权限执行它,sudo exec这不是一件事,所以我以 root 身份sudo -i运行exec /var/www/script,但我仍然有权限被拒绝。我相当不确定为什么以 root 身份执行它不起作用。我想知道我是不是
A) 使用错误的命令来执行 bash 脚本
B)脚本中的格式不正确
C) 不应该将它保存到 /var/www/
D) 做了一些我什至不知道的其他事情。
如果有帮助,我正在运行 ubuntu 服务器 16.04。
首先,确保您拥有正确的文件权限:
chmod +x /var/www/script_name #Gives the current user execute permissions
Run Code Online (Sandbox Code Playgroud)
为了执行您的bash脚本,最简单的选择是通过输入脚本的相对路径来简单地调用它(没有任何额外的命令):
/var/www/script_name
Run Code Online (Sandbox Code Playgroud)
还有其他选项可用于从 shell 显式执行脚本(在您的情况下,使用bashshell 将脚本作为bash脚本执行)。从TLDP 文档...
脚本也可以由给定的 shell 显式执行,但通常只有在我们想要获得特殊行为时才这样做,例如检查脚本是否与另一个 shell 一起工作或打印跟踪以进行调试:
rbash script_name.sh # Execute using the restricted bash shell
sh script_name.sh # Execute using the sh shell
bash -x script_name.sh # Execute using the bash shell
Run Code Online (Sandbox Code Playgroud)
不建议在脚本中使用文件扩展名,尤其是当您认为您的代码可能会超出其当前功能时。
以防万一你想知道文件扩展名是否可能是你的问题......它不是。重要的是您知道脚本的文件扩展名根本不是必需的。重要的是你在“shebang”行中放了什么:
要使用sh外壳:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
要使用bash外壳:
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
您使用什么文件扩展名无关紧要 - “shebang”行指示将使用哪个 shell 来执行脚本。您可以使用#!/bin/bashas的“shebang”保存脚本script_name.py,但它仍然是bash脚本。如果您尝试执行它,./script_name.py它将作为bash脚本执行。
正如@Arjan 在评论中提到的,如果您决定更改项目的实现(即,不同的 shell/语言),为脚本使用文件扩展名可能会导致不必要的复杂化:
我决定以后我的项目转移到
sh,python,perl,C,等。也许是因为我想补充的功能。也许是因为我想让它移植到没有bash. 如果我使用.sh文件扩展名会困难得多,因为那时我需要更改对脚本的所有引用,因为我更改了它的实现。
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |