Я думаю, что ваша третья возможность находится на правильном пути. Что вам не хватает, так это идея сценария-обертки, единственная функция которого - установить среду и затем вызвать основную программу с любыми необходимыми параметрами.
Чтобы создать скрипт-обертку, который может функционировать как скрипт управления (если prodEnv использует DB = ProdDB и т. Д.), Есть еще одна часть, которая упрощает эту проблему. Оба bash / ksh поддерживают функцию, называемую источником файлов. Это операция, которую обеспечивает оболочка, чтобы открыть файл и выполнить то, что находится в файле, так же, как если бы оно было встроено в основной скрипт. Как и #include
в Си и других языках.
ksh и bash автоматически получат /etc/profile
, /var/etc/profile.local
(иногда), $HOME/.profile
. Существуют и другие имена файлов, которые также будут выбраны, но в этом случае вам нужно будет создать свой собственный файл env и явно загрузить его.
Поскольку мы говорим о сценариях-обёртках и вы хотите управлять настройкой среды, вам нужно будет выполнить поиск внутри сценария-обертки.
Как получить файл среды?
envFile=/path/to/my/envFile
. $envFile
где envFile будет заполнен такими операторами, как
dbServer=DevDBServer
webServer=QAWebServer
....
вы можете обнаружить, что вам нужно экспортировать эти переменные, чтобы они были видимыми
export dbServer webServer
Поддерживается альтернативное назначение / экспорт
export dbServer=DevDBServer
export webServer=QAWebServer
В зависимости от того, насколько неидентичны ваши разные среды, ваш скрипт-оболочка может определить, какой файл среды загружать.
case $( /bin/hostame ) in
prodServerName )
envFile=/path/2/prod/envFile ;;
QASeverName )
envFile=/path/2/qa/envFile ;;
devSeverName )
envFile=/path/2/dev/envFile ;;
esac
. ${envFile}
#NOW call your program
myProgram -v -f inFile -o outFile ......
Поскольку вы разрабатываете все больше и больше сценариев в своей среде обработки данных, вы всегда можете source
свой envFile вверху. Когда вы в конечном итоге меняете физическое местоположение сервера (или его имя), у вас есть только одно место, в котором вам нужно внести изменения.
IHTH