gpt4 book ai didi

bash - 环境变量不在父 shell 中持久化

转载 作者:行者123 更新时间:2023-12-04 13:49:03 28 4
gpt4 key购买 nike

我有以下 bash 脚本,它尝试自动承担 AWS 角色(我显然已经删除了各种私有(private)设置):

#! /bin/bash
#
# Dependencies:
# brew install jq
#
# Execute:
# source aws-cli-assumerole.sh

unset AWS_SESSION_TOKEN
export AWS_ACCESS_KEY_ID=<user_access_key>
export AWS_SECRET_ACCESS_KEY=<user_secret_key>

temp_role=$(aws sts assume-role \
--role-arn "arn:aws:iam::<aws_account_number>:role/<role_name>" \
--role-session-name "<some_session_name>")

export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq .Credentials.AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $temp_role | jq .Credentials.SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $temp_role | jq .Credentials.SessionToken)

env | grep -i AWS_

我必须使用 source 来执行这个脚本因为否则,如果我使用标准 bashsh导出的环境变量在执行此脚本的父 shell 中不可用。

问题是,即使使用 source它不起作用;我的意思是:环境变量及其正确/更新的值显示在父 shell 中(如果我执行 env | grep AWS_ 我可以看到正确的值)。

如果我随后尝试使用 AWS CLI 工具(例如 aws s3 ls - 列出我担任角色的特定账户中的所有 s3 存储桶),它会报告访问 key 无效。

但是,如果我手动复制并粘贴环境变量值并在父 shell 中重新导出它们(用已经设置的完全相同的值有效地覆盖它们),那么 AWS CLI 命令将起作用 - 但我不知道为什么.有什么不同?

最佳答案

jq .Blah将返回引用的输出。

所以例如export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq .Credentials.AccessKeyId)将结果 "KEY"相反,您需要的只是 KEY这就是为什么您的 xargs 在您的评论中起作用。

如果您将 -r 标志用于带有 jq 的 raw,您将得到您想要的结果export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq -r .Credentials.AccessKeyId)

关于bash - 环境变量不在父 shell 中持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718379/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com