Я пытаюсь создать сценарий оболочки для автоматизации локальной локальной среды. Мне нужно запустить некоторые процессы (Redis, MongoDB и т. Д.), Установить переменные окружения, а затем запустить локальный веб-сервер. Я работаю над OS X El Capitan.Настройка переменных среды в сценарии оболочки OS X
Все работает до сих пор, кроме переменных окружения. Вот сценарий:
#!/bin/bash
# Starting the Redis Server
if pgrep "redis-server" > /dev/null
then
printf "Redis is already running.\n"
else
brew services start redis
fi
# Starting the Mongo Service
if pgrep "mongod" > /dev/null
then
printf "MongoDB is already running.\n"
else
brew services start mongodb
fi
# Starting the API Server
printf "\nStarting API Server...\n"
source path-to-file.env
pm2 start path-to-server.js --name="api" --watch --silent
# Starting the Auth Server
printf "\nStarting Auth Server...\n"
source path-to-file.env
pm2 start path-to-server.js --name="auth" --watch --silent
# Starting the Client Server
printf "\nStarting Local Client...\n"
source path-to-file.env
pm2 start path-to-server.js --name="client" --watch --silent
Файл .env
использует формат export VARIABLE="value"
Переменные окружения просто не установлен вообще. Но, если я запускаю точную команду source path-to-file.env
перед запуском скрипта, тогда она работает. Мне интересно, почему команда будет работать независимо, но не внутри сценария оболочки.
Любая помощь будет оценена по достоинству.
Что именно находится в этом файле? Как «echo $-» сравнивается между вашей интерактивной оболочкой, где она работает, и скриптом, где это не так? –
... наиболее вероятным сценарием является то, что вы запускаете 'set -a' в' ~/.bashrc' или аналогичном. –
(предполагая разумные ожидания - то есть вы не ожидаете, что переменные будут доступны в интерактивном режиме после выхода сценария). –