From 992888d4bdc148339086557dc3636c605b4a276b Mon Sep 17 00:00:00 2001 From: Matthew Winter <33818+wintermi@users.noreply.github.com> Date: Sat, 30 Dec 2023 05:40:07 +1100 Subject: [PATCH] Ensure the cwd is not changed, whilst remaining a logon shell --- src/termio/Exec.zig | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index 7912875e5..2624c6e52 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -841,6 +841,12 @@ const Subprocess = struct { break :hush if (dir.access(".hushlogin", .{})) true else |_| false; } else false; + const cmd = try std.fmt.allocPrint( + alloc, + "exec -l {s}", + .{opts.full_config.command orelse default_path}, + ); + // The reason for executing login this way is unclear. This // comment will attempt to explain but prepare for a truly // unhinged reality. @@ -883,9 +889,11 @@ const Subprocess = struct { // Awesome. try args.append("/usr/bin/login"); if (hush) try args.append("-q"); - try args.append("-fp"); + try args.append("-flp"); try args.append(username); - try args.append(opts.full_config.command orelse default_path); + try args.append("/bin/sh"); + try args.append("-c"); + try args.append(cmd); break :args try args.toOwnedSlice(); }