2017-09-12 14 views
2

settings.pyを更新するために使用している次のAWKスクリプトがあります。 Dockerのインストール中に私はENV変数を渡そうとしています。合格するAwkでの環境変数の使用方法

ENV変数:

DB_USER, 
DB_PASS, 
DB_NAME 

awk 'function pr(sp, k, v){ # prints key-value pair with indentation 
     printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
    } 
    /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) } 
    /NAME/{ sp=substr($0,1,index($0,"\047")-1); 
      print sp$1" \047$DB_NAME\047"; 
      pr(sp,"USER","$DB_USER"); pr(sp,"PASSWORD","$DB_PASS"); 
      pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
    }1' 

答えて

2

以下のコードあなたがGNU Awk man pageから、GNU Awk

ENVIRON変数を使用することができ、

ENVIRON

環境の値を含む連想配列。配列の添字は環境変数名です。要素は特定の環境変数の値です。たとえば、ENVIRON["HOME"]"/home/arnold"です。この配列を変更しても、awkがリダイレクトまたはsystem()の機能によって生成される可能性のあるプログラムに渡される環境には影響しません。 (gawkの将来のバージョンでは、それはそうすることがあります。)

をご使用の環境変数を参照するには、上記のアレイを使用して、ちょうどすべての変数をロードし、

awk 'BEGIN { 
    db_user = ENVIRON["DB_USER"] 
    db_pass = ENVIRON["DB_PASS"] 
    db_name = ENVIRON["DB_NAME"] 
}' 
後でそれを使用する BEGIN句でこれを行います

db_user,db_passおよびdb_nameAwkの本文に使用してください。 BEGINに環境変数をインポートすることにより、入力ファイルの各行に対して1回インポートする必要はありません。

関連する問題