-
-
Save kr/6161118 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python | |
# jsonenv reads a json object as input and produces | |
# escaped shell commands for setting environment vars | |
import json | |
import pipes | |
import sys | |
for k, v in json.load(sys.stdin).items(): | |
k = pipes.quote(k) | |
v = pipes.quote(v) | |
print "%s=%s export %s;" % (k, v, k) |
@kr why not to export URL=...
?
If you're attempting to use this with python3
, all you need to do is change the line:
print "%s=%s export %s;" % (k, v, k)
to:
print("%s=%s export %s;" % (k, v, k))
Thanks @kr!
Thanks, can you help me how do i do the reverse way, convert bash config separated by = to give json string.
conf1='value1'
conf2='value2'
to produce json string
output={
'conf1':'value1',
'conf2':'value2'
}
@neps-in
did you figure out any way to do it?
pipes.quote
is wrong for the env names. Env names can only contain word characters, so it should be instead sth like k = re.sub("[^a-zA-Z_0-9]+", "_", k)
Have you tried jq
as an alternative?
$ jq -r '. | to_entries[] | "export \(.key)=\(@sh "\(.value)")"' ~/tmp/x.json
export URL='https://foo:[email protected]/'
export OTHER='foo " bar '\''baz'\'''
That's not identical output to the Python above, but it is equivalent. (To encode single-quote ('
) characters, it uses <backslash>'
outside quotes instead of "'"
.)
Thanks
this should work without the need to paste code into cmdline again:
for k, v in json.load(open('local.settings.json')).items():
os.environ[k] = v
Very nice. Thanks!