如何在执行后使父shell中的变量可用

问题描述 投票:0回答:1

下面是简化的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>数据<

执行完成后。现在从同一个终端访问数据没有结果: -

echo $aData

即使在init方法中导出数据,也不会打印任何内容。

要求是在执行a.sh的execute方法后访问$ aData,但init和execute方法不能访问。

请建议。

bash shell export sh parent-child
1个回答
0
投票

您可以使用source builtin命令:

你的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; execute”

请注意,a.sh中定义的所有函数都将在父shell中定义(例如,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"
© www.soinside.com 2019 - 2024. All rights reserved.