1

有两个选项可以运行 shell 脚本:

$ ./some/script.sh

$ . ./some/script.sh

据我了解,第一个基于脚本的给定 shebang 行启动了一个新的 shell 环境。而第二个在同一个 shell 环境中执行语句。

还有更多的区别吗?

我在哪里可以找到关于第二个的更多文档?

.真正的命令吗?我找不到它的联机帮助页。

4

3 回答 3

4

还有更多的区别吗?

问题的要点是在同一进程中.逐行执行脚本的使用。否则分叉一个新进程。并且单独的进程无法更改父进程,例如它无法更改当前目录等环境变量。

我在哪里可以找到关于第二个的更多文档?

[cnicutar@fresh ~]$ help source
source: source filename [arguments]
...

是 。真正的命令

[cnicutar@fresh ~]$ type .
. is a shell builtin

如果它不明显,.并且source是相同的*。


正如 rush 评论source的那样,POSIX 未指定,因此您可能应该.在旨在可移植的代码中使用。在第 2 章中指定。

于 2012-08-13T19:24:46.460 回答
1

.是用于读取文件并执行文件中命令的 Bourne Shell 命令,您的分析基本正确。bash 和其他 shell 添加source..

请参阅bash builtins手册,并参阅Bourne sh builtins.手册的顶部。

从当前 shell 上下文中的文件名参数读取并执行命令。如果文件名不包含斜杠,则使用 PATH 变量查找文件名。当 Bash 不处于 posix 模式时,如果在 $PATH 中找不到文件名,则搜索当前目录。如果提供了任何参数,它们将在执行 filename 时成为位置参数。否则位置参数不变。返回状态是最后执行的命令的退出状态,如果没有执行任何命令,则返回零。如果未找到文件名或无法读取文件名,则返回状态为非零。这个内置函数相当于 source。

于 2012-08-13T19:25:34.003 回答
0

它用于获取环境。例如.profile。

于 2012-08-13T19:22:42.557 回答