脚本通常以诸如 之类的 shebang 开头#!/usr/bin/env bash
,它指定要用于执行的 shell。shebang 不存在时的执行行为似乎取决于调用 shell。无论哪种方式,脚本都是从“新”shell 运行的,它不知道调用 shell 中定义的变量和函数。
或者,也可以将脚本source
放入 shell,根据我的理解,这相当于将脚本内容复制粘贴到当前 shell 中。如果在脚本中定义了任何函数或变量,那么它们将在“执行”后保留在调用 shell 中,这可能是不可取的。
这两个选项之间有什么吗?是否有可能将脚本作为调用 shell 的子 shell 执行,这样我们就可以访问调用 shell 中定义的所有内容,但不会修改它(除非可能有export
这样的命令)?
写作(source myscript.sh)
似乎是在做我想做的事;这是正确的方法吗?是否有等效的 shebang 会通过调用产生相同的行为./myscript.sh
?