environment-variables – 不在openshift中扩展的环境变量

似乎如果我使用如下命令:

rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"

引用的目录变量永远不会扩展,因此我不能将它用于我的应用程序.有没有什么办法解决这一问题?

编辑

正如@ timo.rieber在他的回答中指出的那样,这不会起作用,因为变量在本地被解析,它没有任何价值.事实上:

$rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"
Setting environment variable(s) ... done
$rhc env show VARIABLE
VARIABLE=/file

但是,如果我使用单引号来避免立即扩展:

$rhc env set VARIABLE='$OPENSHIFT_DATA_DIR/file'
Setting environment variable(s) ... done
$rhc env show VARIABLE
VARIABLE=$OPENSHIFT_DATA_DIR/file

有趣的是,这不起作用(即当过程使用时不会发生扩展),即使这次正确设置也是如此.

最佳答案 问题解释:

$OPENSHIFT_DATA_DIR的值在本地计算机上得到解析.很可能它会为空,因为您的机器上未设置此变量.

无法读取内置服务器端环境变量的值,如$OPENSHIFT_DATA_DIR.只会暴露外部设置的变量.您可以通过以下示例尝试此操作:

user@machine:~$rhc env list

user@machine:~$rhc env set VARIABLE="file"
Setting environment variable(s) ... done

user@machine:~$rhc env list
VARIABLE=file

user@machine:~$rhc env unset VARIABLE
Removing environment variables is a destructive operation that may result in loss of data.
VARIABLE

Are you sure you wish to remove the environment variable(s) above from application 'yourapp'?(yes|no):yes

Removing environment variable(s) ... done

user@machine:~$rhc env list

解:

设置两个环境变量并在程序代码中使用它们来构建路径:

1.定义第一个环境变量以定义要读取的内置环境变量

user@machine:~$rhc env set MY_ENV_VAR_FOR_BASE_DIR="OPENSHIFT_DATA_DIR"
Setting environment variable(s) ... done

2.定义第二个环境变量以指定给定目录中的文件夹

user@machine:~$rhc env set MY_TARGET_FOLDER="file"
Setting environment variable(s) ... done

3.在你的代码中(python示例)构建你的路径

(InteractiveConsole)
>>> import os

>>> os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")
'OPENSHIFT_DATA_DIR'

>>> os.environ.get("OPENSHIFT_DATA_DIR")
'/var/lib/openshift/your_user_dir/app-root/data/'

>>> os.environ.get("MY_TARGET_FOLDER")
'file'

>>> os.path.join(os.environ.get(os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")), os.environ.get("MY_TARGET_FOLDER"))
'/var/lib/openshift/your_user_dir/app-root/data/file'
点赞