我试图让我的服务器执行一个简单的bash脚本:
reflect.Kind
将此保存到/ var / www / script后(我特意将其保存到web目录中)我尝试用
执行它 #!/bin/bash
echo Hello World
此操作无法返回我无法执行该操作,exec /var/www/script
不是{I},所以我sudo exec
然后以root身份运行sudo -i
我仍然拥有没有权限。我很不确定为什么以root身份执行它并不起作用。我想知道我是不是
A)使用错误的命令执行bash脚本
B)脚本中的格式不正确
C)不应该将其保存到/ var / www /
D)做了一些我甚至都不知道的事情。
如果有帮助,我正在运行ubuntu服务器16.04。
答案 0 :(得分:2)
首先,确保您拥有正确的文件权限:
chmod +x /var/www/script_name #Gives the current user execute permissions
为了执行你的bash
脚本,最简单的选择是只需通过输入脚本的相对路径来调用它(不需要任何其他命令):
/var/www/script_name
还有其他选项可以从shell显式执行脚本(在您的情况下,使用bash
shell将脚本作为bash
脚本执行)。来自TLDP documentation ...
脚本也可以由给定的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
建议不要在脚本中使用文件扩展名,尤其是在您认为代码可能超出其当前功能的情况下。
万一你想知道文件扩展名是否是你的问题......事实并非如此。重要的是,您知道脚本的文件扩展名根本不是必需的。什么问题是你放在" shebang"行:
使用sh
shell:
#!/bin/sh
使用bash
shell:
#!/bin/bash
使用什么文件扩展名无关紧要 - " shebang" line表示将使用哪个shell来执行脚本。您可以使用" shebang"保存脚本。 #!/bin/bash
作为script_name.py
,但它仍然是bash
脚本。如果您尝试执行它./script_name.py
,它将作为bash
脚本执行。
正如@Arjan在评论中提到的,如果您决定更改项目的实现(即,不同的shell /语言),则使用脚本的文件扩展名可能会导致不必要的复杂化:
我稍后可以决定将我的项目转移到
sh
,python
,perl
,C
等等。也许是因为我想添加功能。也许是因为我想让它可以移植到没有bash
的系统。如果我使用.sh
文件扩展名会更加困难,因为那时我需要更改我对脚本的所有引用,因为我改变了它的实现。
答案 1 :(得分:0)
您有两种选择:
将其作为bash的参数运行:
bash /var/www/script
或者,设置执行位:
chmod +x /var/www/script
现在你可以直接执行它了:
/var/www/script