如何使用zsh函数提供脚本源而不设置子shell来设置环境变量?

时间:2019-02-05 13:21:43

标签: shell zsh

我正在尝试运行一个zsh / bash脚本,该脚本向环境变量写入多个值,我希望这些变量可用于父shell,因为我们使用的几种工具都需要这些变量。如果我使用'手动运行脚本。 myscript myparamater'我得到了预期的结果,但是定义zsh函数来执行此操作而不必使用点表示法不会导致设置变量。

我对zsh / bash脚本编写还很陌生,这是我第一次真正地努力编写有用的东西。我正在MacOS上运行此程序,但也希望它也能在Linux上运行,我的函数正在采购的脚本正在执行某些bash逻辑,并且在某些情况下还执行了第三方可执行文件(实际上是调用Java二进制文件的bash脚本) )。在我的脚本中,我直接使用可执行文件名调用第三方工具,使用exec或点表示法调用它似乎无法正常工作。

zsh功能:

function okta-auth {
    . okta_setprofile $1
}

我的脚本: https://gist.github.com/ckizziar/a60a84a6a148a8fd7b0ef536409352d3

使用'。 okta_setprofile myprofile'我收到了okta_setprofile脚本的预期输出,在我的Shell中设置了四个环境变量(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_DEFAULT_REGION和AWS_SESSION_TOKEN)。 使用“ okta-auth myprofile”脚本反馈与以前相同,但是执行后,不会设置或更新环境变量。

更新了20190206以显示流量

okta_setprofile flow diagam

0 个答案:

没有答案