aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/parse/mod.rs6
-rw-r--r--test-cases/semicolon/script.sh2
-rw-r--r--tests/common.rs8
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()
+ );
}