diff --git a/packages/core/src/shell.ts b/packages/core/src/shell.ts index 1340b345e4..8d4b254093 100644 --- a/packages/core/src/shell.ts +++ b/packages/core/src/shell.ts @@ -159,7 +159,7 @@ export const layer = Layer.effect( const cwd = input.cwd ?? location.directory const configShell = Config.latest(yield* config.entries(), "shell") const shell = ShellSelect.preferred(configShell) - const args = ShellSelect.args(shell, input.command, cwd) + const args = ShellSelect.args(shell, input.command) const file = path.join(outputDir, `${id}.out`) const env = { ...process.env, diff --git a/packages/core/src/shell/select.ts b/packages/core/src/shell/select.ts index 6bef02c203..110697421d 100644 --- a/packages/core/src/shell/select.ts +++ b/packages/core/src/shell/select.ts @@ -163,37 +163,10 @@ function info(file: string): Item { } } -export function args(file: string, command: string, cwd: string) { +export function args(file: string, command: string) { const n = name(file) if (n === "nu" || n === "fish") return ["-c", command] - if (n === "zsh") { - return [ - "-l", - "-c", - ` - [[ -f ~/.zshenv ]] && source ~/.zshenv >/dev/null 2>&1 || true - [[ -f "\${ZDOTDIR:-$HOME}/.zshrc" ]] && source "\${ZDOTDIR:-$HOME}/.zshrc" >/dev/null 2>&1 || true - cd -- "$1" - eval ${JSON.stringify(command)} - `, - "opencode", - cwd, - ] - } - if (n === "bash") { - return [ - "-l", - "-c", - ` - shopt -s expand_aliases - [[ -f ~/.bashrc ]] && source ~/.bashrc >/dev/null 2>&1 || true - cd -- "$1" - eval ${JSON.stringify(command)} - `, - "opencode", - cwd, - ] - } + if (n === "zsh" || n === "bash") return ["-c", command] if (n === "cmd") return ["/c", command] if (ps(file)) return ["-NoProfile", "-Command", command] return ["-c", command] diff --git a/packages/core/test/shell.test.ts b/packages/core/test/shell.test.ts index d38c160d01..a3fd4f2b6b 100644 --- a/packages/core/test/shell.test.ts +++ b/packages/core/test/shell.test.ts @@ -55,12 +55,10 @@ describe("shell", () => { }) test("builds command args per shell family", () => { - expect(ShellSelect.args("/bin/sh", "echo hi", "/tmp")).toEqual(["-c", "echo hi"]) - expect(ShellSelect.args("/usr/bin/fish", "echo hi", "/tmp")).toEqual(["-c", "echo hi"]) - const zsh = ShellSelect.args("/bin/zsh", "echo hi", "/tmp") - expect(zsh[0]).toBe("-l") - expect(zsh[1]).toBe("-c") - expect(zsh.at(-1)).toBe("/tmp") + expect(ShellSelect.args("/bin/sh", "echo hi")).toEqual(["-c", "echo hi"]) + expect(ShellSelect.args("/usr/bin/fish", "echo hi")).toEqual(["-c", "echo hi"]) + expect(ShellSelect.args("/bin/zsh", "echo hi")).toEqual(["-c", "echo hi"]) + expect(ShellSelect.args("/bin/bash", "echo hi")).toEqual(["-c", "echo hi"]) }) if (process.platform === "win32") { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 8a0c713a49..98d58630ba 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -521,7 +521,7 @@ export const layer = Layer.effect( const cfg = yield* config.get() const sh = ShellSelect.preferred(cfg.shell) - const args = ShellSelect.args(sh, input.command, cwd) + const args = ShellSelect.args(sh, input.command) let output = "" let aborted = false