好的,所以我不想硬编码一些镜像远程服务器(OpenShift 服务器)的本地环境变量,我想以编程方式完成它,所以我们不必手动保持一切都是最新的。
现在我把这个硬编码在一个文件中:
#!/usr/bin/env bash
export OPENSHIFT_MONGODB_DB_USERNAME="admin"
export OPENSHIFT_MONGODB_DB_PASSWORD="xyz"
export OPENSHIFT_MONGODB_DB_HOST="emsa-xyz-2-emsa.cloudapps.nabisco.com"
export OPENSHIFT_MONGODB_DB_PORT=60161
我可以使用以下命令从 OpenShift 检索“公共”环境变量,而不是硬编码:
rhc env list -a <app-name>
将其写入标准输出:
NODE_ENV=jailbreak
NPM_CONFIG_PRODUCTION=true
OPENSHIFT_MONGODB_DB_HOST=emsa-xyz-2-emsa.cloudapps.nabisco.com
OPENSHIFT_MONGODB_DB_PASSWORD=xyz
OPENSHIFT_MONGODB_DB_PORT=60161
OPENSHIFT_MONGODB_DB_USERNAME=admin
有谁知道我如何获取该标准输出,然后导出这些变量中的每一个?
我假设它会是这样 - 获取每一行然后放在export
它前面然后运行bash -e "export x"
......问题是它可能在一个子shell中运行并且不会影响当前的shell?
这个问题的现有答案是好的,不应该丢失。
如果您信任 rhc 命令的输出,您可以直接获取它:
这将获取(执行)
rhc
产生的每一行。如所写,上面的代码定义了变量但不导出它们。我们可以解决这个问题,但下面的代码更安全并且可以导出。
源命令 ,
.
需要一个文件作为参数。要将 的输出转换rhc
为类似文件的对象,我们使用进程替换:<(...)
。为了更安全,请使用:
在这里,我们使用进程替换,
<(...)
结合输入重定向,<
以便while
循环从 的输出中读取rhc
。第一个和第二个之间的空间<
是必不可少的:不要省略它。告诉 bash导出变量的
-x
选项。declare
更改顺序
根据下面的评论,该
rhc
命令可以通过以下方式放置在while
循环上方的行上:<<<
在这里创建一个字符串。在这种情况下,这意味着$tmpvar
作为输入提供给while
循环。