【问题标题】:Running executables without ./ or bash or source在没有 ./ 或 bash 或源的情况下运行可执行文件
【发布时间】:2019-09-26 19:17:03
【问题描述】:

我正在学习 bash 和 linux 的基础知识。要执行脚本,我可以键入...

bash script1

source script1

./script1

前两个将在没有chmod u+x 的情况下运行,最后一个需要它。

据我了解,bash 会尝试在子 shell 中运行,以免搞砸。当我在文件名前添加bash 时,它会在子shell 中执行。 source 只是告诉计算机在当前 shell 中运行它的一种方式。我不确定为什么这些不需要执行权限。

./ 非常简单。但是,我见过有人在没有./ 的情况下运行脚本。有人告诉我,我可以通过使用PATH 来做到这一点。我完全不明白PATH 这个东西。

谁能用最简单的方式解释一下?

【问题讨论】:

标签: bash path


【解决方案1】:

开启

bash script1

您正在执行bash(需要执行权限的那个)来读取和处理script1(需要读取权限)。

开启

source script1

您告诉当前bash 读取文件并像在当前shell 上键入一样处理它,因此当前bash 读取脚本(读取权限)并执行每一行。

终于来了

./script1

您告诉bash 尝试运行一个名为./script1 的文件,因此它会检查它是否可执行(对./script1 的执行权限)并将此文件传递给内核以执行。内核打开文件并根据需要进行操作(如果它有一个 shebang 行,它会使用给定的任何内容,如果它发现它是一个 ELF 对象,它会在内存中准备二进制文件......)。

关于PATH,检查一些文档,如果有任何疑问,请返回。

【讨论】:

  • 我想这带来了另一个问题。没有执行权限的任何人(不是用户)仍然可以通过简单地放置 bash 或源来运行我的文件吗?如果是这样,这有点违背了许可的目的。
  • 是的,因为使用 bashsource 您没有执行脚本。您正在通过bash 阅读它,这是正在执行的。如果您想避免脚本被“执行”,请删除读取权限(以避免bash 读取和解释它)和执行权限(以避免内核执行它)。
【解决方案2】:

PATH 是环境变量。它是一个列表,包含在您发出命令时将搜索的所有目录。因此,如果您的 PATH 定义为 PATH=/bin:/usr/bin 这两个目录将被搜索,如果您将其重新定义为 export PATH=./:$PATH 它也会将当前目录添加到搜索列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2020-03-28
    • 1970-01-01
    • 2018-07-16
    • 2021-05-08
    相关资源
    最近更新 更多