我正在学习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,它还会将当前目录添加到搜索列表中。