#!/usr/bin/env python3 # Drop into a new shell environment with the same variables defined in a systemd # unit file (for debugging purposes). # # USAGE: # $ systemd-shell -u buildkite-agent-foundation-1.service import argparse import os def parse_env(entry): x = entry[12:].split("=", 1) return x[0].removeprefix("\"").removesuffix("\""), x[1].removeprefix("\"").removesuffix("\"") def run(unit): envfile = [] print("--- Environment ---") for line in open(f"/etc/systemd/system/{unit}").readlines(): if line.startswith("Environment="): key, val = parse_env(line[:-1]) print(f"export {key}={val}") envfile.append(f"{key}={val}") else: continue print() env = " ".join(envfile) print("--- Command ---") os.system(f"/usr/bin/env {env} /bin/sh") if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("-u", "--unit", type=str, required=True) args = parser.parse_args() run(args.unit)