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

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

  1. filename # (B)

这个命令如何相关?

  1. ./filename # (C)

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

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

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

  1. $echo $PATH
  2. /some/directory
  3. $filename
  4. results
  5.  
  6. $/some/directory/filename
  7. results

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

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

猜你在找的Bash相关文章