我所知道的是,当我有两个脚本文件时,可以说a.sh
andb.sh
使用 script 中定义的变量或函数a.sh
,然后. ./a.sh
工作但./a.sh
不起作用。在运行 shell 脚本时,两者都./script.sh
可以. ./script.sh
正常工作。./script.sh
使用和运行脚本有什么区别. ./script.sh
?
问问题
630 次
2 回答
8
. path/to/script
源文件(在同一个 shell 中执行它)。另一个调用派生了一个执行脚本的新 shell 进程。
在子进程中调用脚本将使其变量对父进程不可用。采购脚本将在同一个父进程中引入和更改变量。
于 2013-10-22T12:16:40.813 回答
4
该符号. ./a.sh
是 的缩写source ./a.sh
。 source
是执行 shell 的内置命令,用于逐行读取给定文件并执行其中写入的所有内容,就像直接在 shell 中键入一样。因此,如果 中有一个exit
语句a.sh
,它将关闭提供该语句的 shell;通常,xterm 窗口随后会关闭。
然而,符号./a.sh
开始了一个新的过程;这是由当前的 shellfork
本身完成的,然后使分叉的子exec
进程执行给定的程序。在这种情况下,这又是一个 shell 脚本,因此将使用一个新的 shell exec
。这个新外壳所做的一切都不会影响原始(父)外壳。如果子进程没有被发送到后台,则父进程等待子进程终止。
于 2013-10-22T12:26:05.153 回答