我跟随json
{ “NODE_ENV”:“生产”, “APP_URL”: “测试”}我想替换键的值,如果它们存在于环境变量上,只使用unix命令而不是…
Perl,使用CPAN的JSON模块:
perl -MJSON -0777 -lne ' my $data = decode_json $_; for my $key (keys %$data) { $data->{$key} = $ENV{$key} if exists $ENV{$key}; } print encode_json($data); ' file.json
或Ruby,没有外部依赖
ruby -rjson -e ' data = JSON.parse(File.read(ARGV.shift)) data.each_key {|key| data[key] = ENV[key] if ENV.has_key? key} puts JSON.generate(data) ' file.json
如果你改变主意和你的想法 要求 这是一个shell脚本的例子,你可以通过使用它来做到这一点 JQ 。
#!/bin/sh for key in `jq "keys | .[]" $1 | xargs` ; do eval "_TO_CHECK=\$$key" ## if [ "$_TO_CHECK" ]; then jq ".$key=\"$_TO_CHECK\"" $1 > _temp.json && mv _temp.json $1 fi done
这在Python中非常简单:
import json import os import sys data = json.load(sys.stdin) newdata = {x: os.environ.get(x, data[x]) for x in data} json.dump(newdata, sys.stdout, indent=2)
像它一样使用它 ./update_from_env.py < test.json > new.json; mv new.json test.json
./update_from_env.py < test.json > new.json; mv new.json test.json