间接调用Bash脚本 - 以及如何恰当地使用`source`的难题

时间:2013-11-25 19:17:51

标签: bash shell environment-variables

我有一个名为greeting_script的脚本,如下所示:

GREETING='Top O the Morning to Ya!'
export GREETING
echo $GREETING

如果我从命令行运行此脚本,我会看到以下结果:

> export GREETING='hello'
> echo $GREETING
hello
> source greeting_script
Top O the Morning to Ya!
> echo $GREETING
Top O the Morning to Ya!

这就是我的期望。我有另一个名为'indirect_greeting_script'的脚本,如下所示:

#!/bin/bash
source greeting_script

如果我从命令行运行此脚本,我会看到以下内容:

> export GREETING='hello'
> echo $GREETING
hello
> indirect_greeting_script
Top O the Morning to Ya!
> echo $GREETING
hello

请注意,我在indirect_greeting_script上设置了权限,以便能够直接在命令行执行。我还有#!/bin/bash

的第一行

显然,当我间接调用greeting_script时,结果没有正确存储在我当前的环境中。我希望indirect_greeting_script在命令行中是可执行文件,而不是我必须source的文件。什么是我不明白的?

注意:如果我使indirect_greeting_script成为普通文件(即不可执行),则按预期工作,删除读取#!/bin/bash的前导行并使用source命令调用它。

1 个答案:

答案 0 :(得分:2)

子进程无法修改其父进程的环境。 export只是标记要包含在任何子进程的环境中的参数。当您在脚本中调用它时,它不会导致将值发送回父级。