2016-04-15 15 views
1

私はこの美しさを書いて、サーバ上で実行し、環境変数をJSONからbash .envに変換しました。JSONをbash環境変数に変換する

#!/usr/bin/env node 
var strings = [] 
process.stdin.resume() 
process.stdin.setEncoding('utf8') 
process.stdin.on('data', function(data) { 
    var json = JSON.parse(data) 
    for (var key in json) { 
    var val = json[key] 
    strings.push(key + '="' + val + '"') 
    } 
}) 
process.stdin.on('end', function() { 
    var output = strings.join('\n') 
    process.stdout.write(output) 
}) 

ノードなしでこれを行うことはできますか?bashですか?ノードがインストールされていない、または正しいパスが指定されていないサーバーでこの問題が発生するのが問題です。

+3

このコードの動作を知らないので、それを指定してください。 bashでJSOnを処理するには、jq - > https://stedolan.github.io/jq/ – fedorqui

+0

を使用してください。STDIN JSONとSTDOUTを処理するコマンド/ファイル/ bashスクリプトが必要です。各キー値のペアは 'key + '= "' + val + '"' 'の後に改行が続きます。 – ThomasReggi

+0

@fedorqui ubuntu/linux/unixにネイティブではない依存関係は使用できません。 – ThomasReggi

答えて

3

はい、あなたは維持したいすべてのキー/ヴァル・ペアの形式であると仮定:

"key":"stringval" 
"key":numval 
"key":true or false or null 

(コロンの周りのオプションスペースを持つ):

#!/bin/sh 
tr -d '\n' | 
    grep -o '"[A-Za-z_][A-Za-z_0-9]\+"\s*:\s*\("[^"]\+"\|[0-9\.]\+\|true\|false\|null\)' | 
    sed 's/"\(.*\)"\s*:\s*"\?\([^"]\+\)"\?/\1="\2"/' 

例:

cat manifest.json | ./json2env.sh 

収量

name="Polymer Starter Kit" 
short_name="Polymer Starter Kit" 
src="images/touch/icon-72x72.png" 
sizes="72x72" 
type="image/png" 
test1="0.123" 
test2="true" 
test3="false" 
test4="null" 
+0

ありがとうございます。それは期待どおりに動作します:) – Ibrahim