2012-02-29 155 views
2

有没有可能以某种方式在Linux中拥有动态环境变量?Linux中的动态环境变量?

我有一个网络服务器,其中网站采用这种布局:

site/ 
    qa/ 
    production/ 

我想有一个环境变量(如APPLICATION_ENV)被设置为“QA”当我在QA目录是和当我在生产目录中时“生产”。原因是各个站点可以使用许多不同的流程,都需要知道它是QA还是生产环境。有些网站在Apache下使用PHP,一些使用Node.js,一些网站使用命令行工具,cron作业等等。我希望获得一个授权来源,了解它是质量保证还是生产环境。

+0

也许,'pwd'会怎么做? – vines 2012-02-29 10:23:50

+0

这是一个shell脚本吗?你可以使用'$(basename $(pwd))' – 2012-02-29 10:25:18

+0

不仅仅是shell脚本。如果只是这样,它会很容易:-)有许多网站,有许多不同的流程,脚本等等。这就是为什么我想要*一个*应用程序环境的授权来源(如果可能,我宁愿将其放在环境变量中,因为所有的Linux进程都理解环境变量) – 2012-02-29 10:30:27

回答

6

基于rvm的覆盖:

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

只是把这个功能在.bashrc或一些其它来源的环境文件,并尝试cdqaproduction,或它们的一个子目录中。

+0

哦,很好的技巧。谢谢! – 2012-02-29 13:58:04

1

您可以在/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")

+0

谢谢,这听起来很有用。我会试一试。 – 2012-02-29 13:57:08