Я пишу сценарий bash для автоматизации задачи установки переменных среды для моего проекта. но когда я запускаю свой скрипт bash, используя sh env.sh
(env.sh — это имя моего файла). Я могу получить значение от секретного менеджера AWS, и когда я делаю эхо внутри сценария bash, я могу распечатать переменную env, но когда я запускаю переменную echo $ после выполнения файла bash, она ничего не возвращает.
Я попытался заменить eval на источник, но не повезло
также я искал в stackoverflow проблему, но ни один из них не помог.
найти скрипт ниже
#! /usr/bin/env bash
if [[ "$OSTYPE" == "darwin"* ]]; then
echo 'running'
if ! [ -x "$(command -v aws)" ]; then
echo 'Aws is not installed. Installing aws............................' >&2
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
if ! [ $(id -u) = 0 ]; then
echo "The script need to be run as root." >&2
exit 1
fi
sudo installer -pkg AWSCLIV2.pkg -target /
if ! [ -x "$(command -v aws)" ]; then
echo 'There was some issue installing aws cli. Install aws-cli manually and then run the script!!!' >&2
exit 1
fi
echo "Running aws command please enter the aws access key and secrect"
aws configure
fi
aws secretsmanager get-secret-value --secret-id abc --query SecretString --output text | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' > /tmp/secrets.env
eval $(cat /tmp/secrets.env | sed 's/^/export /')
fi
В настоящее время я запускаю этот файл bash в Mac OS, но я хотел бы, чтобы он работал на любой ОС.
Если файл содержит имена переменных среды setup_local_env.sh
, попробуйте
source setup_local_env.sh
Это добавит их к вашему текущему сеансу.
Есть еще одно решение, называемое точечным источником. Проверьте ссылку здесь
. ./setup_local_env.sh
Причина, по которой вы запускаете ./setup_local_env.sh
напрямую, не работает, потому что он создает новый процесс bash и устанавливает там переменную среды, а затем он теряется после выхода нового процесса bash.
И минус за ответ на очередной дурак..