diff --git a/crates/nu-command/src/filesystem/ls.rs b/crates/nu-command/src/filesystem/ls.rs index a9e98885e6..0fa94e1cc1 100644 --- a/crates/nu-command/src/filesystem/ls.rs +++ b/crates/nu-command/src/filesystem/ls.rs @@ -147,9 +147,13 @@ impl Command for Ls { Some(glob_options) }; let (prefix, paths) = - nu_engine::glob_from(&glob_path, &cwd, call_span, glob_options) - .expect("glob failure"); - + match nu_engine::glob_from(&glob_path, &cwd, call_span, glob_options) { + Ok((prefix, paths)) => (prefix, paths), + Err(e) => { + shell_errors.push(e); + return Vec::from([Value::nothing(call_span)]).into_iter(); + } + }; let mut paths_peek = paths.peekable(); if paths_peek.peek().is_none() { shell_errors.push(ShellError::GenericError( diff --git a/crates/nu-command/tests/commands/ls.rs b/crates/nu-command/tests/commands/ls.rs index 88703d168a..93d09ea9ee 100644 --- a/crates/nu-command/tests/commands/ls.rs +++ b/crates/nu-command/tests/commands/ls.rs @@ -527,3 +527,11 @@ fn can_list_system_folder() { )); assert_eq!(ls_with_filter.err, ""); } + +#[test] +fn list_a_directory_not_exists() { + Playground::setup("ls_test_directory_not_exists", |dirs, _sandbox| { + let actual = nu!(cwd: dirs.test(), "ls a_directory_not_exists"); + assert!(actual.err.contains("directory not found")); + }) +}