#!/usr/bin/env python import os import subprocess import sys import shlex def read_env(data): return dict( item.split(b"=", 1) for item in data.split(b"\0") if item ) def main(): if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} DIR", file=sys.stderr) return 2 before = { os.fsencode(k): os.fsencode(v) for k, v in os.environ.items() } result = subprocess.run( ["direnv", "exec", sys.argv[1], "env", "-0"], stdout=subprocess.PIPE, check=True, ) after = read_env(result.stdout) for key, value in after.items(): if before.get(key) != value: name = os.fsdecode(key) val = os.fsdecode(value) print(f"export {name}={shlex.quote(val)}") if __name__ == "__main__": sys.exit(main())