【问题标题】:About script execution permissions on Linux shell关于 Linux shell 上的脚本执行权限
【发布时间】:2021-11-16 05:28:11
【问题描述】:

事情是这样的:

  • 我刚刚创建了一个脚本,比如说“helloworld.sh”。
  • 脚本还没有执行权限:-rw-rw-r--
  • 话虽如此,如果我尝试使用以下命令执行该脚本:“./helloword.sh”,我将收到一条错误消息,正如预期的那样。
  • 但是,如果我尝试执行与“.helloword”相同的脚本,它将毫无问题地执行。

所以,我的问题是,如何?为什么会这样?

【问题讨论】:

    标签: linux permissions script


    【解决方案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 授予脚本,则会发生相同的过程,因为当您使用./ 或类似名称调用脚本时,也会创建一个新会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多