下面是简化的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方法不能访问。
请建议。
您可以使用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"