在Bash脚本中设置environment变量以用于AWS CLI

在Bash脚本中设置environment变量以用于AWS CLI,bash,environment-variables,aws-cli,Bash,Environment Variables,Aws Cli,我试图通过运行bash脚本来设置通过Ubuntu18.04终端中的AWS CLI向AWS发出请求所需的环境变量,而不是在shell中使用export手动设置环境变量 我已经确认,我正在使用的AWS凭据仍然处于活动状态,因为当我从shell中设置环境变量时,这些凭据仍然有效,并且还可以通过AWS凭据文件工作。因此,我认为将值传递给环境变量的方式一定有问题 我试着引用一些话,但由于我是新来的,我不知道下一步该怎么做 #!/bin/bash unset AWS_ACCESS_KEY_ID unset

我试图通过运行bash脚本来设置通过Ubuntu18.04终端中的AWS CLI向AWS发出请求所需的环境变量,而不是在shell中使用export手动设置环境变量

我已经确认,我正在使用的AWS凭据仍然处于活动状态,因为当我从shell中设置环境变量时,这些凭据仍然有效,并且还可以通过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
但这会导致SignatureDesNotMatch错误

非常感谢您在这方面提供的任何帮助或指导。

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

您可以将最后一行
done<$file
替换为

done < <(tr -d '\r' < "${file}" )
done<您的
文件=“/path/to/accessKeys.csv”
是Windows格式(带有
\r
)。
密钥已设置为
****j6YS\r

您可以将最后一行
done<$file
替换为

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

done<运行
aws配置列表| tr-d'\r'
时是否有帮助?如何运行脚本?您需要
source
脚本才能在当前shell会话中设置环境变量。是的,我正在寻找脚本以在当前shell中运行,并且环境变量在我运行脚本后显示。您正在寻找OK,但可以通过添加以下行来帮助未来用户:
(返回0 2>/dev/null)|{printf“%s\n”使用“source$0”在当前shell中启动;退出1;}
使用
aws配置列表| tr-d'\r'
使输出看起来几乎正确。(将编辑问题以显示输出)但我在尝试运行AWS CLI命令时仍然收到一个签名不匹配的错误。当您运行
AWS配置列表| tr-d'\r'
时是否有帮助?您是如何运行脚本的?您需要
source
脚本才能在当前shell会话中设置环境变量。是的,我正在寻找脚本以在当前shell中运行,并且环境变量在我运行脚本后显示。您正在寻找OK,但可以通过添加以下行来帮助未来用户:
(返回0 2>/dev/null)|{printf“%s\n”使用“source$0”在当前shell中启动;退出1;}
使用
aws配置列表| tr-d'\r'
使输出看起来几乎正确。(将编辑问题以显示输出)但当我尝试运行AWS CLI命令时,仍然会收到一个签名不匹配错误。非常感谢,它工作得非常好。我不想打扰你们太多,但你们有并没有什么建议可以让我在哪里读到为什么文件是Windows格式的,或者我如何知道这一点?再次感谢您的帮助。除非您更改编辑器的设置,否则在windows上创建/编辑的大多数文件都是\r\n的。您可以使用
dos2unix
tr-d'\r'
删除字符,或使用
grep-c“^M”文件进行检查(通过CTRL-V CTRL-M将^M作为一个字符插入)。当这起作用时,你可以接受答案。非常感谢,效果非常好。我不想打扰你们太多,但你们有并没有什么建议可以让我在哪里读到为什么文件是Windows格式的,或者我如何知道这一点?再次感谢您的帮助。除非您更改编辑器的设置,否则在windows上创建/编辑的大多数文件都是\r\n的。您可以使用
dos2unix
tr-d'\r'
删除字符,或使用
grep-c“^M”文件进行检查(通过CTRL-V CTRL-M将^M作为一个字符插入)。当这起作用时,你可以接受答案。
:~$ 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
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}" )