From 822c67b3e0f86a89a1391b448dcce509baff7a6f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 14 Nov 2023 16:58:27 -0800 Subject: [PATCH] termio/exec: fall back to default command if specified command not found Fixes #880 If a command is specified but it can't be found, then we try to fallback to a default command like "sh" and log the issue. This prevents Ghostty from simply exiting. --- src/termio/Exec.zig | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index 85513ba91..fa85c53d4 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -722,13 +722,28 @@ const Subprocess = struct { const alloc = arena.allocator(); // Determine the path to the binary we're executing + const default_path = switch (builtin.os.tag) { + .windows => "cmd.exe", + else => "sh", + }; const path = try Command.expandPath( alloc, - opts.full_config.command orelse switch (builtin.os.tag) { - .windows => "cmd.exe", - else => "sh", - }, - ) orelse return error.CommandNotFound; + opts.full_config.command orelse default_path, + ) orelse path: { + // If we had a command specified, try to at least fall + // back to a default value like "sh" so that Ghostty + // launches. + if (opts.full_config.command) |command| { + log.warn("unable to find command, fallbacking back to default command={s}", .{command}); + if (try Command.expandPath( + alloc, + default_path, + )) |path| break :path path; + } + + log.warn("unable to find default command to launch, exiting", .{}); + return error.CommandNotFound; + }; // On macOS, we launch the program as a login shell. This is a Mac-specific // behavior (see other terminals). Terminals in general should NOT be