下面是简化的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方法不应具有访问权限。
请提出建议。
答案 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"