运行没有 ./ 或 bash 或源代码的可执行文件



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

bash script1

source script1

./script1

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

根据我的理解,bash 试图在子壳中运行东西,这样它就不会把事情搞砸。当我在文件名之前添加bash时,它会在子外壳中执行。source只是告诉计算机在当前 shell 中运行它的一种方式。我不确定为什么这些不需要执行权限。

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

有人可以用最简单的方式解释吗?

bash script1

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

source script1

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

最后,在

./script1

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

关于PATH,请检查一些文档并返回特定的疑问(如果有的话(。

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

相关内容

最新更新