Динамические переменные среды в Linux?

Возможно ли каким-то образом иметь динамические переменные среды в Linux?

У меня есть веб-сервер, на котором сайты следуют этому макету:

site/
    qa/
    production/

Я хотел бы иметь переменную среды (например, APPLICATION_ENV), для которой установлено значение «qa», когда я нахожусь в каталоге qa, и значение «production», когда я нахожусь в каталоге производства. Причина этого в том, что разные сайты могут использовать множество разных процессов, и все они должны знать, является ли это средой контроля качества или производственной средой. Некоторые сайты используют PHP под Apache, некоторые используют Node.js, некоторые сайты поставляются с инструментами командной строки, заданиями cron и так далее. Я хотел бы иметь один авторитетный источник о том, является ли это QA или производственной средой.


person Sander Marechal    schedule 29.02.2012    source источник
comment
Это для сценария оболочки? Вы можете просто использовать $(basename $(pwd))   -  person Lee Netherton    schedule 29.02.2012
comment
Не только для сценариев оболочки. Было бы просто, если бы это было именно так :-) Есть много сайтов с множеством разных процессов, скриптов и т.д. Вот почему мне нужен один авторитетный источник среды приложения (и я бы предпочел, если возможно, использовать переменную среды, потому что все процессы Linux понимают переменные среды)   -  person Sander Marechal    schedule 29.02.2012


Ответы (2)


На основе переопределения rvm:

cd () { 
    if builtin cd "$@"
    then
        if [[ "$PWD" =~ /(qa|production)(/|$) ]]
        then
            export APPLICATION_ENV="${BASH_REMATCH[1]}"
        else
            unset APPLICATION_ENV
        fi
        return 0
    else
        return $?
    fi
}

Просто поместите эту функцию в .bashrc или какой-либо другой исходный файл среды и попробуйте cd в qa, production или в один из их подкаталогов.

person l0b0    schedule 29.02.2012

Вы можете создать исполняемый скрипт в одном из каталогов /bin или /usr/bin и выполнить его из скриптов сайта. Не понимаю, зачем тебе взламывать cd.

/usr/bin/какая-версия:

#!/bin/bash
if [[ "$PWD" =~ /(qa|production)(/|$) ]]
then
  echo "${BASH_REMATCH[1]}"
else
  echo "unknown"
fi

Веб-сайт:

$env = system("which-version")

person perreal    schedule 29.02.2012
comment
Спасибо, звучит полезно. Я попробую. - person Sander Marechal; 29.02.2012