关于 Linux shell 上的脚本执行权限
Posted
技术标签:
【中文标题】关于 Linux shell 上的脚本执行权限【英文标题】:About script execution permissions on Linux shell 【发布时间】:2021-11-16 05:28:11 【问题描述】:事情是这样的:
我刚刚创建了一个脚本,比如说“helloworld.sh”。 脚本还没有执行权限:-rw-rw-r-- 话虽如此,如果我尝试使用以下命令执行该脚本:“./helloword.sh”,我将收到一条错误消息,正如预期的那样。 但是,如果我尝试执行与“.helloword”相同的脚本,它将毫无问题地执行。所以,我的问题是,如何?为什么会这样?
【问题讨论】:
【参考方案1】:这是因为在 Linux 上的“.” (dot) 单独是一个内置命令,可在当前会话中使用当前 shell 执行脚本。这与使用 source 命令(BSD 默认方法)调用脚本相同。这几乎与使用bash helloworld.sh
执行相同。
当你用./helloworld.sh
或/root/helloworld.sh
调用脚本时,shell 会尝试找出如何执行它,如果文件是二进制文件,它会简单地运行,如果是脚本,shell 会读取寻找解释器的第一行。为此,您需要执行权限。
为了简化:
一个是命令; 另一个是路径。你甚至可以运行:
. --help
关于.
与bash
:
这就是我们使用 . 或 source 从会话中的文件加载变量的原因,例如,当我们更改 ~/.bashrc 并重新加载它而无需再次登录。
您可以在执行时看到这种情况:
. /etc/os-release
此文件中定义的所有变量都将被加载并在您当前的 shell 会话中可用。
如果你执行,同样的情况不会发生:
bash /etc/os-release
因为您在调用的 bash 中打开了一个“新会话”,所以新的 bash 会执行并关闭,从而清理会话。
如果您将执行权限+x
授予脚本,则会发生相同的过程,因为当您使用./
或类似名称调用脚本时,也会创建一个新会话。
【讨论】:
以上是关于关于 Linux shell 上的脚本执行权限的主要内容,如果未能解决你的问题,请参考以下文章