Bash脚本条件设置全局AWS密钥环境变量不生效问题求解
问题
我想写一个Bash脚本,接收单个参数("prod"或"staging"),以此设置全局环境变量,实现切换预演(staging)和生产(prod)环境的AWS密钥。但脚本内日志显示正常,运行脚本后在终端执行echo $AWS_ACCESS_KEY却看不到变量更新。我尝试加了source ~/.zshrc但觉得没必要,请问怎么修改才能让$AWS_ACCESS_KEY全局生效?
附上的脚本代码:
#!/bin/bash tmpAccess="access" tmpSecret="secret" if [ $1 == "prod" ]; then echo "Setting the AWS KEYS to $1 keys" tmpAccess=$PROD_ACCESS_KEY tmpSecret=$PROD_SECRET_KEY elif [ $1 == "staging" ]; then echo "Setting the AWS KEYS to $1 keys" tmpAccess=$STAGING_ACCESS_KEY tmpSecret=$STAGING_SECRET_KEY else echo "Unknown env passed in: $1" fi export AWS_ACCESS_KEY=$tmpAccess export AWS_SECRETS_KEY=$tmpSecret echo "Updated AWS_ACCESS_KEY: $AWS_ACCESS_KEY" echo "Current tmpAccess: $tmpAccess" echo "AWS_ACCESS_KEY has been updated to $AWS_ACCESS_KEY for env $1" echo "AWS_SECRETS_KEY has been updated to $AWS_SECRETS_KEY for env $1" source ~/.zshrc
我的.zshrc文件内容:
export STAGING_ACCESS_KEY=1234 export STAGING_SECRETS_KEY=abcd export PROD_ACCESS_KEY=5678 export PROD_SECRETS_KEY=efgh
解决方案
核心问题:直接运行脚本会在子shell中执行,子shell内的环境变量无法传递给父终端shell,所以终端里看不到更新。要让变量生效,必须让脚本在当前shell环境中执行,同时修正脚本里的变量名错误。
具体修改步骤:
- 移除脚本末尾的
source ~/.zshrc——这行代码会重新加载配置文件,直接覆盖你刚设置的变量,完全多余。 - 必须用
source或.命令加载脚本,而不是直接运行:source ./你的脚本名.sh prod # 或者用简写形式 . ./你的脚本名.sh staging - 修正脚本里的变量名:你.zshrc里的密钥变量是
STAGING_SECRETS_KEY(复数SECRETS),但脚本里写的是STAGING_SECRET_KEY(单数SECRET),这会导致变量取值为空,必须统一变量名。
修改后的最终脚本:
#!/bin/bash tmpAccess="access" tmpSecret="secret" # 给$1加引号,避免参数为空时触发语法错误 if [ "$1" == "prod" ]; then echo "Setting the AWS KEYS to $1 keys" tmpAccess=$PROD_ACCESS_KEY tmpSecret=$PROD_SECRETS_KEY # 修正为复数SECRETS elif [ "$1" == "staging" ]; then echo "Setting the AWS KEYS to $1 keys" tmpAccess=$STAGING_ACCESS_KEY tmpSecret=$STAGING_SECRETS_KEY # 修正为复数SECRETS else echo "Unknown env passed in: $1" exit 1 # 可选:遇到错误参数直接退出脚本 fi export AWS_ACCESS_KEY=$tmpAccess export AWS_SECRETS_KEY=$tmpSecret echo "AWS_ACCESS_KEY has been updated to $AWS_ACCESS_KEY for env $1" echo "AWS_SECRETS_KEY has been updated to $AWS_SECRETS_KEY for env $1"
内容的提问来源于stack exchange,提问作者johnny_mac
相关产品推荐
相关产品推荐

