有两个选项可以运行 shell 脚本:
$ ./some/script.sh
$ . ./some/script.sh
据我了解,第一个基于脚本的给定 shebang 行启动了一个新的 shell 环境。而第二个在同一个 shell 环境中执行语句。
还有更多的区别吗?
我在哪里可以找到关于第二个的更多文档?
是.
真正的命令吗?我找不到它的联机帮助页。
有两个选项可以运行 shell 脚本:
$ ./some/script.sh
$ . ./some/script.sh
据我了解,第一个基于脚本的给定 shebang 行启动了一个新的 shell 环境。而第二个在同一个 shell 环境中执行语句。
还有更多的区别吗?
我在哪里可以找到关于第二个的更多文档?
是.
真正的命令吗?我找不到它的联机帮助页。
还有更多的区别吗?
问题的要点是在同一进程中.
逐行执行脚本的使用。否则分叉一个新进程。并且单独的进程无法更改父进程,例如它无法更改当前目录等环境变量。
我在哪里可以找到关于第二个的更多文档?
[cnicutar@fresh ~]$ help source
source: source filename [arguments]
...
是 。真正的命令
[cnicutar@fresh ~]$ type .
. is a shell builtin
如果它不明显,.
并且source
是相同的*。
正如 rush 评论source
的那样,POSIX 未指定,因此您可能应该.
在旨在可移植的代码中使用。点在第 2 章中指定。
.
是用于读取文件并执行文件中命令的 Bourne Shell 命令,您的分析基本正确。bash 和其他 shell 添加source
为.
.
请参阅bash builtins手册,并参阅Bourne sh builtins.
手册的顶部。
从当前 shell 上下文中的文件名参数读取并执行命令。如果文件名不包含斜杠,则使用 PATH 变量查找文件名。当 Bash 不处于 posix 模式时,如果在 $PATH 中找不到文件名,则搜索当前目录。如果提供了任何参数,它们将在执行 filename 时成为位置参数。否则位置参数不变。返回状态是最后执行的命令的退出状态,如果没有执行任何命令,则返回零。如果未找到文件名或无法读取文件名,则返回状态为非零。这个内置函数相当于 source。
它用于获取环境。例如.profile。