Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:使变量在任何地方都可用(不是导出问题)_Bash_Environment Variables_Aws Codeartifact - Fatal编程技术网

Bash:使变量在任何地方都可用(不是导出问题)

Bash:使变量在任何地方都可用(不是导出问题),bash,environment-variables,aws-codeartifact,Bash,Environment Variables,Aws Codeartifact,我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS代码工件)。当我通过CLI登录时,它会设置一个环境变量—我们将其称为令牌。当我运行任何构建时,它需要存在令牌来进行身份验证 现在,在登录之后,相同shell中的构建可以工作,但显然,新shell(不是子shell)中的构建会失败,因为TOKEN当然没有定义。我正在寻找解决这个问题的方法;理想情况下,解决方案可以执行以下操作: 登录shell:登录后,在~/.TOKEN 所有shell:每分钟运行一次,将TO

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

现在,在登录之后,相同shell中的构建可以工作,但显然,新shell(不是子shell)中的构建会失败,因为
TOKEN
当然没有定义。我正在寻找解决这个问题的方法;理想情况下,解决方案可以执行以下操作:

  • 登录shell:登录后,在
    ~/.TOKEN
  • 所有shell:每分钟运行一次,将
    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:讨论如何在写入提示之前运行函数,分别在执行命令之前。也许您可以使用此策略设置您的
    令牌