import sys, re def parse_env(path): pairs = [] with open(path) as f: for line in f: line = line.strip() if not line or line.startswith('#') or '=' not in line: continue k, _, v = line.partition('=') k = k.strip(); v = v.strip() if (v.startswith("'") and v.endswith("'")) or \ (v.startswith('"') and v.endswith('"')): v = v[1:-1] pairs.append((k, v)) return pairs def merge_envs(base_path, override_path): """Merge two env files. Keys in override_path win over base_path.""" base = dict(parse_env(base_path)) override = dict(parse_env(override_path)) merged = {**base, **override} return list(merged.items()) mode = sys.argv[1] if mode == 'export': for k, v in parse_env(sys.argv[2]): print('export {}={}'.format(k, repr(v))) elif mode == 'export_merged': # export_merged for k, v in merge_envs(sys.argv[2], sys.argv[3]): print('export {}={}'.format(k, repr(v))) elif mode == 'vars': print(' '.join('$' + k for k, v in parse_env(sys.argv[2]))) elif mode == 'vars_merged': # vars_merged print(' '.join('$' + k for k, v in merge_envs(sys.argv[2], sys.argv[3]))) elif mode == 'strip': t = sys.stdin.read() t = re.sub(r'[ \t]*env_file:[ \t]*\n([ \t]+-[^\n]*\n)+', '', t) sys.stdout.write(t)