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