【问题标题】:Setting Enivironment Variables in Bash script for use with AWS CLI在 Bash 脚本中设置环境变量以用于 AWS CLI
【发布时间】:2019-08-17 23:43:55
【问题描述】:

我正在尝试通过运行 bash 脚本在 Ubuntu 18.04 终端中设置通过 AWS CLI 向 AWS 发出请求所需的环境变量,而不必在 shell 中使用 export 手动设置我的环境变量。

我已经确认,当我从 shell 设置环境变量并通过 AWS 凭证文件工作时,我正在使用的 AWS 凭证仍然有效。所以我认为我将值传递给环境变量的方式一定有问题。

我试过用引号括起来,但由于我是新手,所以不知道下一步该去哪里。

#!/bin/bash
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
file="/path/to/accessKeys.csv"
cnt=0
 export AWS_DEFAULT_REGION=us-east-1
 export AWS_DEFAULT_OUTPUT=text
while IFS=, read var1 var2  
do 

      if [ $cnt = 1 ]
      then 
        echo $cnt
        export AWS_ACCESS_KEY_ID=$var1
        export AWS_SECRET_ACCESS_KEY=$var2
      fi

      cnt=$(($cnt + 1))

done < $file

当我运行 AWS 配置列表时,我得到以下输出

:~$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************C4JA              env    
              env    **********6YS
    region                us-east-1              env    AWS_DEFAULT_REGION

当我运行 env 以查看环境变量时,AWS_SECRET_ACCESS_KEY 似乎是正确的,尽管我期望来自 AWS 配置列表的输出(当我在 shell 中使用导出手动设置变量时得到的输出)

~$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************C4JA              env    
secret_key     ****************j6YS              env    
    region                us-east-1              env    AWS_DEFAULT_REGION

AWS configure list | tr -d '\r' 的输出

:~$ aws configure list | tr -d '\r'
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************C4JA              env    
secret_key     ****************6YS              env    
    region                us-east-1              env    AWS_DEFAULT_REGION

但这会产生 SignatureDoesNotMatch 错误。

对此的任何帮助或指示将不胜感激。

【问题讨论】:

  • 运行aws configure list | tr -d '\r'有帮助吗?
  • 如何运行脚本?您需要source 脚​​本才能在当前 shell 会话中设置环境变量。
  • 是的,我正在寻找要在当前 shell 中运行的脚本,并且在我运行脚本后会显示环境变量。
  • 您的采购正常,但可以通过添加以下行来帮助未来的用户:(return 0 2&gt;/dev/null) || { printf "%s\n" "Start in current shell with" " source $0" ; exit 1 ; }
  • 使用aws configure list | tr -d '\r' 使输出看起来几乎正确。 (将编辑问题以显示输出)但当我尝试运行 AWS CLI 命令时,我仍然收到签名不匹配错误。

标签: bash environment-variables aws-cli


【解决方案1】:

您的file="/path/to/accessKeys.csv" 是Windows 格式(带有\r)。
密钥已设置为*****j6YS\r

您可以将最后一行done &lt; $file替换为

done < <(tr -d '\r' < "${file}" )

或者只得到第二行

done < <(sed -n '2s/\r*//p' "${file}" )

你不需要循环

IFS=, read -d'' -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY < <(sed -n '2s/\r*//p' "${file}" )

【讨论】:

  • 非常感谢,完美运行。不要太打扰你,但你有什么指示我可以在哪里阅读为什么文件是 Windows 格式,或者我怎么知道这一点?再次感谢您的帮助。
  • 大多数在 Windows 上创建/编辑的文件都带有 \r,除非您更改了编辑器的设置。您可以使用dos2unixtr -d '\r' &lt; infputfile 删除字符,或使用grep -c "^M" file 进行检查(通过CTRL-V CTRL-M 将^M 作为一个字符插入)。当这可行时,您可以接受答案。
猜你喜欢
  • 2013-11-15
  • 2016-10-07
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2011-03-05
  • 2021-07-23
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多