Bash:使变量在任何地方都可用(这不是EXPORT上的问题)



我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS CodeArtifact(。当我通过CLI登录时,它会设置一个环境变量——让我们称之为TOKEN。当我运行任何构建时,它都需要存在TOKEN来进行身份验证。

现在,登录后,同一shell中的构建可以工作,但很明显,新shell(不是子shell(中的构建会失败,因为TOKEN当然没有定义。我正在寻找解决这个问题的方法;理想的解决方案是这样做的:

  1. 登录shell:登录后,将TOKEN保存在~/.token
  2. 所有shell:每分钟运行一次,将TOKEN设置为~/.token中的值

我有两个问题:

  • 这是最好的方式吗?还是有更优雅的东西
  • 如果是这样的话,做上述(2(的最佳方法是什么

最后的问题是,这是我将在最终用户的机器上分发给他们的东西,所以如果它易于编写脚本,那就太好了。

提前感谢-保持安全!

当问题2得到回答时,问题1的解决方案很简单:开始编写将返回令牌的函数。

TOKEN=$(get_token)

第一个实现将在没有任何缓存或共享的情况下重新计算新令牌。

您多久需要一次代币?如果不是每分钟构建一次,则不需要每分钟刷新一次令牌的额外作业(cronjob(。在这种情况下,您可以通过调用函数在每次api调用之前刷新令牌。您不需要存储或共享它。
当您经常需要TOKEN时,您可以修改函数。使用文件是直接的,但您也可以使用另一种解决方案,如服务器(当您希望在远程主机上为已使用其他令牌标识的用户提供令牌时(
下一个挑战是如何自动化获取新令牌的手动过程
您能找到一种不需要输入密码的方法吗(比如使用.aws/config或(更好(为服务器分配正确的角色(?还是需要使用expect编写呼叫脚本
neneneba API调用get-authorization-token需要codeartifact:GetAuthorizationToken和sts:GetServiceBearerToken权限。

相关内容