执行后如何使变量在父外壳中可用

时间:2018-09-06 03:41:28

标签: bash shell export sh parent-child

下面是简化的shell脚本a.sh:-

function init(){
    export aData="Data of a"
    echo "init of a"
}

function execute(){
    init
    echo "execute of a >$aData<"
}

$@

,此shell脚本由以下别名调用:-

alias ae="sh a.sh execute"

执行ae会得到以下结果:-

  

a的初始

     

执行> << / p>的>数据

执行完成后。现在从同一终端访问aData不会产生任何结果:-

echo $aData

即使在初始化方法中导出了aData,也不会打印任何内容。

要求是在执行a.sh的execute方法之后有权访问$ aData,但init和execute方法不应具有访问权限。

请提出建议。

1 个答案:

答案 0 :(得分:0)

您可以改用source内置命令:

您的a.sh应该如下所示:

function init(){
export aData="Data of a"
echo "init of a"
}

function execute(){
    init
    echo "execute of a >$aData<"
}

,您可以在sh shell中以这种方式调用execute函数:

alias ae=". a.sh; execute"

或在bash shell中     别名ae =“ source a.sh;执行”

请注意,然后a.sh中定义的所有函数都将在父外壳程序中定义(例如,init,execute等)。为避免这种情况(可能导致函数名冲突),可以使用以下t2.sh脚本:

case "$1" in
    execute)
        export aData="Data of a"
        echo "init of a"
        ;;
    anyother_command_to_exec)
        # code
        ;;
    *);;
esac

并运行命令

alias ae2=". a2.sh execute"