Merge pull request #881 from mitchellh/unknown-cmd

termio/exec: fall back to default command if specified command not found
This commit is contained in:
Mitchell Hashimoto
2023-11-14 17:17:58 -08:00
committed by GitHub
2 changed files with 30 additions and 5 deletions

View File

@ -278,6 +278,16 @@ palette: Palette = .{},
/// - SHELL environment variable
/// - passwd entry (user information)
///
/// The command is the path to only the binary to run. This cannot
/// also contain arguments, because Ghostty does not perform any
/// shell string parsing. To provide additional arguments, use the
/// "command-arg" configuration (repeated for multiple arguments).
///
/// If you're using the `ghostty` CLI there is also a shortcut
/// to run a command with argumens directly: you can use the `-e`
/// flag. For example: `ghostty -e fish --with --custom --args`.
/// This is just shorthand for specifying "command" and
/// "command-arg" in the configuration.
command: ?[]const u8 = null,
/// A single argument to pass to the command. This can be repeated to

View File

@ -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