45 lines
847 B
Python
Executable File
45 lines
847 B
Python
Executable File
#!/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())
|