尝试运行脚本文件时。我看到的是
运行./a_script
时,它将在当前目录中查找脚本。仅在具有执行权限的情况下运行。
运行.a_script
时,它将在$PATH
中搜索隐藏的脚本文件,并在找到后运行。
运行a_script
时,它将在$PATH
中搜索脚本并运行(如果找到)。
运行. a_script
时,即使未授予脚本执行权限,此命令也会搜索并运行脚本。为什么这样?
此外,.a_script
和./a_script
在当前shell中运行命令。
. a_script
运行的是不同的外壳程序吗?
我可能是错的。有人可以解释这个问题吗?
答案 0 :(得分:3)
运行
./a_script
时,它将在当前目录中查找脚本。仅在具有执行权限的情况下运行。运行
.a_script
时,它将在$PATH
中搜索隐藏的脚本文件,并在找到后运行。运行
a_script
时,它将在$PATH
中搜索脚本并运行(如果找到)。
是的。请注意,在这些情况下,“脚本”不必是实际的shell脚本。任何可执行文件都可以。
此外,.
只是此处命令名称的一部分。在./a_script
中,它代表当前目录。这适用于任何路径:例如ls /./home/.
(与ls /home
相同)。
在a_script
和.a_script
中,命令名称不包含/
,因此执行PATH
搜索。 .
在这里并不特殊。
运行
. a_script
时,即使未授予脚本执行权限,此命令也会搜索并运行脚本。为什么这样?
因为在这种情况下,命令为.
,而a_script
只是.
命令的参数。 .
将搜索给定的文件并在其中执行命令(在当前Shell中)。 a_script
不能是通用可执行文件;它必须是一个shell脚本。
此外,
.a_script
和./a_script
在当前shell中运行命令。
否,如果它们确实是shell脚本,它们将产生一个新的shell来运行它们。
. a_script
运行的是不同的外壳程序吗?
否,相反:内置的.
命令专门从当前shell中的文件运行命令(就像您键入了命令一样)。
.
的另一个名称是source
,其工作方式相同,但更易于搜索。另请参见https://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins。