mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
bash: use a shell command for shell integration
Prior to #7044, on macOS, on macOS, our shell-integrated command line would be executed under `exec -l`, which causes bash to be started as a login shell. This matches the macOS platform norms. The change to direct command execution meant that we'd skip that path, and bash would start as a normal interactive (non-login) shell on macOS. Restore the previous behavior by returning a shell command from our bash integration routine. This is consistent with the code path used when shell integration is disabled. We could alternatively add `--login` to our shell-integrated bash command line for the macOS build. That would let us continue using the direct command strategy, but it would also result in having coordinated, conditional behavior in two places (shell integration? macOS?).
This commit is contained in:
@ -326,9 +326,8 @@ fn setupBash(
|
||||
);
|
||||
try env.put("ENV", integ_dir);
|
||||
|
||||
// Since we built up a command line, we don't need to wrap it in
|
||||
// ANOTHER shell anymore and can do a direct command.
|
||||
return .{ .direct = try args.toOwnedSlice() };
|
||||
// Join the accumulated arguments to form the final command string.
|
||||
return .{ .shell = try std.mem.joinZ(alloc, " ", args.items) };
|
||||
}
|
||||
|
||||
test "bash" {
|
||||
@ -342,9 +341,7 @@ test "bash" {
|
||||
|
||||
const command = try setupBash(alloc, .{ .shell = "bash" }, ".", &env);
|
||||
|
||||
try testing.expectEqual(2, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("bash --posix", command.?.shell);
|
||||
try testing.expectEqualStrings("./shell-integration/bash/ghostty.bash", env.get("ENV").?);
|
||||
try testing.expectEqualStrings("1", env.get("GHOSTTY_BASH_INJECT").?);
|
||||
}
|
||||
@ -387,9 +384,7 @@ test "bash: inject flags" {
|
||||
|
||||
const command = try setupBash(alloc, .{ .shell = "bash --norc" }, ".", &env);
|
||||
|
||||
try testing.expectEqual(2, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("bash --posix", command.?.shell);
|
||||
try testing.expectEqualStrings("1 --norc", env.get("GHOSTTY_BASH_INJECT").?);
|
||||
}
|
||||
|
||||
@ -400,9 +395,7 @@ test "bash: inject flags" {
|
||||
|
||||
const command = try setupBash(alloc, .{ .shell = "bash --noprofile" }, ".", &env);
|
||||
|
||||
try testing.expectEqual(2, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("bash --posix", command.?.shell);
|
||||
try testing.expectEqualStrings("1 --noprofile", env.get("GHOSTTY_BASH_INJECT").?);
|
||||
}
|
||||
}
|
||||
@ -419,18 +412,14 @@ test "bash: rcfile" {
|
||||
// bash --rcfile
|
||||
{
|
||||
const command = try setupBash(alloc, .{ .shell = "bash --rcfile profile.sh" }, ".", &env);
|
||||
try testing.expectEqual(2, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("bash --posix", command.?.shell);
|
||||
try testing.expectEqualStrings("profile.sh", env.get("GHOSTTY_BASH_RCFILE").?);
|
||||
}
|
||||
|
||||
// bash --init-file
|
||||
{
|
||||
const command = try setupBash(alloc, .{ .shell = "bash --init-file profile.sh" }, ".", &env);
|
||||
try testing.expectEqual(2, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("bash --posix", command.?.shell);
|
||||
try testing.expectEqualStrings("profile.sh", env.get("GHOSTTY_BASH_RCFILE").?);
|
||||
}
|
||||
}
|
||||
@ -476,25 +465,13 @@ test "bash: additional arguments" {
|
||||
// "-" argument separator
|
||||
{
|
||||
const command = try setupBash(alloc, .{ .shell = "bash - --arg file1 file2" }, ".", &env);
|
||||
try testing.expectEqual(6, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("-", command.?.direct[2]);
|
||||
try testing.expectEqualStrings("--arg", command.?.direct[3]);
|
||||
try testing.expectEqualStrings("file1", command.?.direct[4]);
|
||||
try testing.expectEqualStrings("file2", command.?.direct[5]);
|
||||
try testing.expectEqualStrings("bash --posix - --arg file1 file2", command.?.shell);
|
||||
}
|
||||
|
||||
// "--" argument separator
|
||||
{
|
||||
const command = try setupBash(alloc, .{ .shell = "bash -- --arg file1 file2" }, ".", &env);
|
||||
try testing.expectEqual(6, command.?.direct.len);
|
||||
try testing.expectEqualStrings("bash", command.?.direct[0]);
|
||||
try testing.expectEqualStrings("--posix", command.?.direct[1]);
|
||||
try testing.expectEqualStrings("--", command.?.direct[2]);
|
||||
try testing.expectEqualStrings("--arg", command.?.direct[3]);
|
||||
try testing.expectEqualStrings("file1", command.?.direct[4]);
|
||||
try testing.expectEqualStrings("file2", command.?.direct[5]);
|
||||
try testing.expectEqualStrings("bash --posix -- --arg file1 file2", command.?.shell);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user