diff --git a/mod.test.ts b/mod.test.ts index 3a3aa55..152d672 100644 --- a/mod.test.ts +++ b/mod.test.ts @@ -1159,10 +1159,21 @@ Deno.test("subshells", async () => { assertEquals(result, "1\n2\n4"); } // shouldn't change the environment either + { + assertEquals(await $`export VAR=5 && echo $VAR`.text(), "5"); // for reference + const result = await $`(export VAR=5) && echo $VAR`.text(); + assertEquals(result, ""); + } { const result = await $`echo 1 && (echo 2 && export VAR=5 && echo $VAR) && echo $VAR`.text(); assertEquals(result, "1\n2\n5\n"); } + await withTempDir(async (tempDir) => { + const subDir = tempDir.join("subDir"); + subDir.mkdirSync(); + const result = await $`(cd subDir && pwd) && pwd`.text(); + assertEquals(result, `${subDir}\n${tempDir}`); + }); }); Deno.test("output redirects", async () => { diff --git a/src/shell.ts b/src/shell.ts index f84b569..ac93668 100644 --- a/src/shell.ts +++ b/src/shell.ts @@ -1017,7 +1017,7 @@ async function executeCommandArgs(commandArgs: string[], context: Context): Prom async function executeSubshell(subshell: Subshell, context: Context): Promise { const result = await executeSequentialList(subshell, context); // sub shells do not change the environment or cause an exit - return { code: result.code, changes: [] }; + return { code: result.code }; } async function pipeReaderToWritable(reader: Reader, writable: WritableStream, signal: AbortSignal) {