diff --git a/crates/nu-command/src/filters/each.rs b/crates/nu-command/src/filters/each.rs index 9767d83b56..d0267b1fce 100644 --- a/crates/nu-command/src/filters/each.rs +++ b/crates/nu-command/src/filters/each.rs @@ -118,6 +118,17 @@ with 'transpose' first."# let span = value.span(); let is_error = value.is_error(); match closure.run_with_value(value) { + Ok(PipelineData::ListStream(s, ..)) => { + let mut vals = vec![]; + for v in s { + if let Value::Error { .. } = v { + return Some(v); + } else { + vals.push(v) + } + } + Some(Value::list(vals, span)) + } Ok(data) => Some(data.into_value(head)), Err(ShellError::Continue { span }) => Some(Value::nothing(span)), Err(ShellError::Break { .. }) => None, diff --git a/crates/nu-command/tests/commands/each.rs b/crates/nu-command/tests/commands/each.rs index 663e07a9f4..f8e87d5537 100644 --- a/crates/nu-command/tests/commands/each.rs +++ b/crates/nu-command/tests/commands/each.rs @@ -73,3 +73,9 @@ fn each_element_break_command() { assert_eq!(actual.out, "[1, 2, 5, 4]"); } + +#[test] +fn errors_in_nested_each_show() { + let actual = nu!("[[1,2]] | each {|x| $x | each {|y| error make {msg: \"oh noes\"} } }"); + assert!(actual.err.contains("oh noes")) +}