Bash:使变量在任何地方都可用(不是导出问题)
我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS代码工件)。当我通过CLI登录时,它会设置一个环境变量—我们将其称为Bash:使变量在任何地方都可用(不是导出问题),bash,environment-variables,aws-codeartifact,Bash,Environment Variables,Aws Codeartifact,我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS代码工件)。当我通过CLI登录时,它会设置一个环境变量—我们将其称为令牌。当我运行任何构建时,它需要存在令牌来进行身份验证 现在,在登录之后,相同shell中的构建可以工作,但显然,新shell(不是子shell)中的构建会失败,因为TOKEN当然没有定义。我正在寻找解决这个问题的方法;理想情况下,解决方案可以执行以下操作: 登录shell:登录后,在~/.TOKEN 所有shell:每分钟运行一次,将TO
令牌
。当我运行任何构建时,它需要存在令牌
来进行身份验证
现在,在登录之后,相同shell中的构建可以工作,但显然,新shell(不是子shell)中的构建会失败,因为TOKEN
当然没有定义。我正在寻找解决这个问题的方法;理想情况下,解决方案可以执行以下操作:
~/.TOKEN
TOKEN
设置为~/.TOKEN
- 这是最好的方式,还是有更优雅的方式
- 如果是这样的话,最好的方法是什么
提前感谢-注意安全 回答问题2时,问题1的解决方案很简单: 开始编写将返回令牌的函数
TOKEN=$(get_token)
第一个实现将在没有任何缓存或共享的情况下重新计算新令牌
您多久需要一次代币?如果不是每分钟都构建,则不需要每分钟都刷新令牌的额外作业(cronjob)。在这种情况下,可以通过调用函数在每次api调用之前刷新令牌。您不需要存储或共享它。当您确实经常需要令牌时,可以修改函数。使用文件很简单,但您也可以使用另一种解决方案,如服务器(当您希望已使用其他令牌标识的用户可以在远程主机上使用令牌时)。
下一个挑战是如何自动化获取新令牌的手动过程。
您是否可以找到一种不需要输入密码的方法(例如使用
.aws/config
或(更好)为服务器分配正确的角色)?或者您需要使用expect
编写呼叫脚本吗?API调用需要codeartifact:GetAuthorizationToken和sts:GetServiceBearToken权限。必须已经导出
标记var,否则生成命令无法访问它。所以它不适合你?构建工具是什么?许多工具可以使用环境变量或配置文件来代替。为什么使用文件不是很优雅呢?我唯一要考虑的是,给定一个时刻,该文件只能包含一个数据。有必要在文件名中提供一个带有实例id的机制,该机制允许有多个文件或一个用于同步的锁。查看mvn脚本似乎是源代码/etc/mavenrc或~/.mavenrc,因此可以在这些文件中设置变量scripts@ragebiswas:讨论如何在写入提示之前运行函数,分别在执行命令之前。也许您可以使用此策略设置您的令牌
?