“source”(.)作为shell命令的目的是什么?

前端之家收集整理的这篇文章主要介绍了“source”(.)作为shell命令的目的是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这两个命令有什么区别?
. filename            # (A)

filename              # (B)

这个命令如何相关?

./filename            # (C)

注意:#和其后的行是注释.

命令(A)被称为源包含shell命令的文件.它可能不用于二进制可执行文件(有关如何确定文件类型的信息,请参阅man文件).它会导致文件中的命令在当前环境中执行,就像在shell提示符下键入它们一样.结果会影响当前环境,因此可以执行诸如设置环境变量的值和更改目录,添加函数定义等操作.没有必要使用chmod设置执行位.该文件需要位于当前目录中,或者必须包含完整或相对路径*,或者文件可以位于PATH环境变量中的位置(取决于是否设置了shopt的sourcepath选项).如果该文件所在的位置,则无需指定当前目录.这些都是等价的:
$ls
filename
$. filename
results

$ls /some/directory/filename
/some/directory/filename
$. /some/directory/filename
results

$cd /elsewhere
$echo $PATH
/some/directory
$. filename
results

命令(B)仅在执行位为用户权限时才会执行该文件(请参阅man chmod).该文件可以是shell脚本,二进制可执行文件或其他脚本,如Perl或Python(或在不同的shell中编写).如果名称中没有斜杠(未指定目录),则该文件必须位于PATH环境变量中包含的目录中.可以在路径中包含当前目录,但我不推荐它,因为它存在安全风险.这些是等价的:

$echo $PATH
/some/directory
$filename
results

$/some/directory/filename
results

命令(C)与命令(B)基本相同,但它指定了当前目录,称为“.”. (正如父目录被称为“..”.由于指定了目录,因此不会搜索PATH以找到该文件.

[*]相对路径是不以斜杠(/)开头的路径.它指定相对于当前目录的位置. “this / is / a / subdir”作为当前目录路径存在,与“./this/is/a/subdir”(指定同一目录)一样. “../another/set/of/dirs”是当前父目录下面的一组目录.

猜你在找的Bash相关文章