コマンドの標準出力を介してプログラムで環境変数をエクスポートする

コマンドの標準出力を介してプログラムで環境変数をエクスポートする

まあ、いくつかのミラーリングされたリモートサーバー(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"。質問はサブシェルで実行し、現在のシェルに影響を与えないことは可能ですか?

この質問に対する既存の答えは素晴らしいので、失うべきではありません。

ベストアンサー1

rhcコマンドの出力を信頼する場合は、直接取得できます。

. <(rhc env list -a <app-name>)

生成されたすべての行を取得または実行しますrhc

書かれているように、上記のコードは変数を定義しますが、エクスポートされません。この問題は解決できますが、以下のコードはより安全でエクスポートできます。

source コマンドには.ファイルが引数として必要です。の出力をrhcファイルオブジェクトに変換するには、次のようにします。プロセスの交換<(...)

セキュリティを強化するには、以下を使用してください。

while read -r line; do declare -x "$line"; done < <(rhc env list -a <app-name>)

ここでは、ループが出力から読み取れるように、入力<(...)リダイレクトと組み合わせたプロセス置換を使用します。最初と2番目の間のスペースは非常に重要です。<whilerhc<いいえ省略してください。

-xdeclarebashオプションを教えてください出口変わりやすい。

注文の変更

以下の説明によれば、rhcコマンドはwhile次の方法でループの上の行に配置できます。

tmpvar=$(rhc env list -a <app-name>)
while read -r line; do declare -x "$line"; done <<<"$tmpvar"

<<<作るここにある文字列。これはループへの入力$tmpvarとして提供されることを意味します。while

おすすめ記事