我有一个名为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
命令调用它。
答案 0 :(得分:2)
子进程无法修改其父进程的环境。 export
只是标记要包含在任何子进程的环境中的参数。当您在脚本中调用它时,它不会导致将值发送回父级。