【发布时间】:2012-02-17 10:36:38
【问题描述】:
我见过包含如下一行的 shell 脚本:
source someOtherFile
我知道导致someOtherFile的内容执行,但是source的意义是什么?
后续问题:可以获取任何脚本,还是仅获取某些类型的脚本?获取脚本时(与正常执行脚本相反),除了环境变量之外是否还有其他副作用?
【问题讨论】:
我见过包含如下一行的 shell 脚本:
source someOtherFile
我知道导致someOtherFile的内容执行,但是source的意义是什么?
后续问题:可以获取任何脚本,还是仅获取某些类型的脚本?获取脚本时(与正常执行脚本相反),除了环境变量之外是否还有其他副作用?
【问题讨论】:
在脚本上运行命令source 会在当前进程的上下文中执行脚本。这意味着脚本设置的环境变量在完成运行后仍然可用。这与正常运行脚本不同,在这种情况下,在新生成的进程中设置的环境变量将在脚本退出后丢失。
您可以获取任何可运行的 shell 脚本。最终效果将与您在终端中键入脚本中的命令相同。例如,如果脚本改变了目录,当它完成运行时,你当前的工作目录将会改变。
【讨论】:
如果你告诉 shell,例如bash,读取文件并执行文件中的命令,称为采购。重点是,当前进程(shell)这样做,而不是新的子进程。
在 BASH 中,您可以使用 source 命令或简单地使用 . 来获取文件。
【讨论】:
source 是一个 Unix 命令,它评估命令后面的文件,作为命令列表,在当前上下文中执行。您也可以使用. 获取文件。
source my-script.sh;
. my-script.sh;
这两个命令的效果是一样的。
相比之下,将脚本文件名传递给所需的 shell 将在子 shell 中运行脚本,而不是在当前上下文中。
【讨论】: