import { describe, expect, test } from "bun:test"; import { mkdirSync } from "fs"; import { bunEnv, bunExe, tmpdirSync } from "harness"; import { join } from "path"; describe.concurrent("run-shell", () => { test("running a shell script works", async () => { const dir = tmpdirSync(); mkdirSync(dir, { recursive: true }); await Bun.write(join(dir, "something.sh"), "echo wah"); await using proc = Bun.spawn({ cmd: [bunExe(), join(dir, "something.sh")], cwd: dir, env: bunEnv, stderr: "pipe", stdout: "pipe", }); const stdout = await proc.stdout.text(); const stderr = await proc.stderr.text(); console.log(stderr); expect(stdout).toEqual("wah\n"); }); test("invalid syntax reports the error correctly", async () => { const dir = tmpdirSync("bun-shell-test-error"); mkdirSync(dir, { recursive: true }); const shellScript = `-h) echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"`; await Bun.write(join(dir, "scripts", "script.sh"), shellScript); await using proc = Bun.spawn({ cmd: [bunExe(), join(dir, "scripts", "script.sh")], cwd: dir, env: bunEnv, stderr: "pipe", stdout: "pipe", }); const stderr = await proc.stderr.text(); expect(stderr).toBe("error: Failed to run script.sh due to error Unexpected ')'\n"); }); });