【问题标题】:source (command) a bash script that sets FOO does not make it visible to other bash scripts源(命令)设置 FOO 的 bash 脚本不会使其对其他 bash 脚本可见
【发布时间】:2012-06-01 18:49:01
【问题描述】:

我有以下 bash 脚本(名为“env.bash”)供源命令使用:

#!/bin/bash
FOO=/some/path

然后我有以下 bash 脚本(名为“compile.bash”):

#!/bin/bash
if [ -z "$FOO" ]; then
    echo "Need to set FOO, did you forget to source env.bash?"
    exit 1
fi 
./compile-something

但是,如果我这样做:

source env.bash
./compile.bash

我得到“需要设置 FOO”,为什么?如果我 echo $FOO 我可以看到它的值就好了。

【问题讨论】:

    标签: bash shell


    【解决方案1】:
    export FOO=/some/path
    

    这应该可行。原因是 shell 脚本将在一个子 shell 中运行,该子 shell 拥有自己的环境副本;超级外壳的变量通常不可见。当您执行export 时,您将使导出变量的副本可用于子shell。

    编辑:删除了不准确之处;另外,感谢@DonCallisto 提出的观点。

    【讨论】:

    • 一切都好,但您忘记了一点:当您export 时,您将复制到子外壳中。所以,就像重新定义变量一样。但这不是一个“全局”变量,因为它是一个副本..
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 2023-03-04
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多