【问题标题】:Difference in invoking shell script from within another shell script从另一个 shell 脚本中调用 shell 脚本的区别
【发布时间】:2011-01-11 04:13:32
【问题描述】:

我的主目录中有两个 shell 脚本 a.shb.sh。在 a.sh 我调用 b.sh 作为

sh b.sh

我也可以通过以下方式进行

. b.sh

请告诉我调用之间的区别。

谢谢, LinuxPenseur

【问题讨论】:

    标签: linux shell scripting


    【解决方案1】:

    第一种方式:

    sh b.sh
    

    创建一个子shell并在子shell中运行b.sh。这样做的后果之一是,当您返回 a.sh 时,在 b.sh 中设置的任何环境变量都会简单地消失

    第二种方法:

    . ./b.sh
    

    来源 b.sh,因此当 b.sh 返回时,在 b.sh 中设置的任何环境变量对 a.sh 仍然可见。

    【讨论】:

      【解决方案2】:

      第二种方式称为“采购”,它将脚本拉入并在同一个shell中执行。

      您会这样做有两个原因:速度,因此第二个脚本可以在您的第一个脚本中设置环境变量。通常在运行脚本或程序时,它不能改变调用者的环境。

      采购速度更快,因为它不需要分叉和启动另一个 shell 进程。您会在某些系统上的 /etc/init/rc 脚本之类的东西中看到这一点,但是对于大多数用途而言,性能差异可能并不重要。采购脚本时,信号处理也有一些微妙之处。

      【讨论】: