diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-05-09 11:57:14 +0200 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-05-09 11:57:14 +0200 |
| commit | 19cf30cae545ceed679f5f9938072f619bedc480 (patch) | |
| tree | 00b4484fcf326db8879e92ea84abf2c6c88103a5 | |
| parent | 18f9e7404aa279bc2184268a6fe8d56c46a6f3af (diff) | |
| download | pish-19cf30cae545ceed679f5f9938072f619bedc480.tar.gz | |
fix semicolon parsing
| -rw-r--r-- | src/parse/mod.rs | 6 | ||||
| -rw-r--r-- | test-cases/semicolon/script.sh | 2 | ||||
| -rw-r--r-- | tests/common.rs | 8 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index dcb5790..c26e0c0 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -1532,6 +1532,12 @@ impl Parse for Pipes<PreExpansion> { if c == b'|' { b.adv(); cmds.push(b.parse()?); + } else if c == b';' { + while b.has() && b.peek() == b';' { + b.adv(); + b.spaces(); + } + return Ok(Pipes { cmds }); } else if space_stats.lf > 0 || is_symbol(c) { return Ok(Pipes { cmds }); } else { diff --git a/test-cases/semicolon/script.sh b/test-cases/semicolon/script.sh index 43a48af..64d83d7 100644 --- a/test-cases/semicolon/script.sh +++ b/test-cases/semicolon/script.sh @@ -1 +1 @@ -echo foo; echo bar +echo -n foo; echo bar diff --git a/tests/common.rs b/tests/common.rs index 210b92a..8541368 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -15,5 +15,11 @@ pub fn test_case(_name: &str, script: &[u8], expected_output: &[u8]) { let _res = spawned.join_timeout(1000); let mut actual_output = Vec::new(); pr.read_to_end(&mut actual_output).unwrap(); - assert_eq!(expected_output, actual_output); + assert_eq!( + expected_output, + actual_output, + "\nexpected: {}\n actual: {}", + expected_output.escape_ascii(), + actual_output.escape_ascii() + ); } |
