1

我所知道的是,当我有两个脚本文件时,可以说a.shandb.sh使用 script 中定义的变量或函数a.sh,然后. ./a.sh工作但./a.sh不起作用。在运行 shell 脚本时,两者都./script.sh可以. ./script.sh正常工作。./script.sh使用和运行脚本有什么区别. ./script.sh

4

2 回答 2

8

. path/to/script源文件(在同一个 shell 中执行它)。另一个调用派生了一个执行脚本的新 shell 进程。

在子进程中调用脚本将使其变量对父进程不可用。采购脚本将在同一个父进程中引入和更改变量。

于 2013-10-22T12:16:40.813 回答
4

该符号. ./a.sh是 的缩写source ./a.shsource是执行 shell 的内置命令,用于逐行读取给定文件并执行其中写入的所有内容,就像直接在 shell 中键入一样。因此,如果 中有一个exit语句a.sh,它将关闭提供该语句的 shell;通常,xterm 窗口随后会关闭。

然而,符号./a.sh开始了一个新的过程;这是由当前的 shellfork本身完成的,然后使分叉的子exec进程执行给定的程序。在这种情况下,这又是一个 shell 脚本,因此将使用一个新的 shell exec。这个新外壳所做的一切都不会影响原始(父)外壳。如果子进程没有被发送到后台,则父进程等待子进程终止。

于 2013-10-22T12:26:05.153 回答