From 2d1beeebb0aa8752cb1d009fe430aa84c967477f Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 18 Feb 2026 14:18:26 +0100 Subject: [PATCH] jw.pkg.lib.util.get_profile_env(): Add function Add a function get_profile_env(), a function returning environment variables from /etc/profile. Pass add=True to add its contents to the existing environment dictionary, overwriting old entries, or pass False to get the pristine content. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/lib/util.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/python/jw/pkg/lib/util.py b/src/python/jw/pkg/lib/util.py index 6b4d9853..90299fe6 100644 --- a/src/python/jw/pkg/lib/util.py +++ b/src/python/jw/pkg/lib/util.py @@ -298,3 +298,16 @@ async def get_password(args: Namespace|None=None, url: str|None=None, askpass_en if parsed.password is not None: return parsed.password return await run_askpass(askpass_env, AskpassKey.Password) + +async def get_profile_env(throw: bool=True, add=False) -> dict[str, str]: # export + env: dict[str,str]|None = None if add else {} + # Run bash, source /etc/profile, then print environment as NUL-separated key=value pairs + cmd = ['/bin/bash', '-lc', 'unset PROFILEREAD; source /etc/profile >/dev/null 2>&1; env -0'] + stdout, stderr = await run_cmd(*cmd, throw=throw, output_encoding="bytes", verbose=True, env=env) + ret: dict[str, str] = {} + for entry in stdout.split(b"\0"): + if not entry: + continue + key, val = entry.split(b"=", 1) + ret[key.decode()] = val.decode() + return ret