获得执行bash脚本的权限

时间:2016-06-12 02:01:15

标签: bash ubuntu

我试图让我的服务器执行一个简单的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。

2 个答案:

答案 0 :(得分:2)

文件权限

首先,确保您拥有正确的文件权限:

chmod +x /var/www/script_name #Gives the current user execute permissions

执行您的Bash脚本

为了执行你的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" line>文件扩展名

建议不要在脚本中使用文件扩展名,尤其是在您认为代码可能超出其当前功能的情况下。

万一你想知道文件扩展名是否是你的问题......事实并非如此。重要的是,您知道脚本的文件扩展名根本不是必需的。什么问题是你放在" 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 /语言),则使用脚本的文件扩展名可能会导致不必要的复杂化:

  

我稍后可以决定将我的项目转移到shpythonperlC等等。也许是因为我想添加功能。也许是因为我想让它可以移植到没有bash的系统。如果我使用.sh文件扩展名会更加困难,因为那时我需要更改我对脚本的所有引用,因为我改变了它的实现。

答案 1 :(得分:0)

您有两种选择:

  1. 将其作为bash的参数运行:

    bash /var/www/script
    
  2. 或者,设置执行位:

    chmod +x /var/www/script
    

    现在你可以直接执行它了:

    /var/www/script