diff --git a/crates/nu-command/src/filesystem/rm.rs b/crates/nu-command/src/filesystem/rm.rs index 7be1b9f00c..7b7fede149 100644 --- a/crates/nu-command/src/filesystem/rm.rs +++ b/crates/nu-command/src/filesystem/rm.rs @@ -250,7 +250,7 @@ fn rm( Ok(files) => { for file in files { match file { - Ok(ref f) => { + Ok(f) => { if !target_exists { target_exists = true; } @@ -263,7 +263,9 @@ fn rm( continue; } - all_targets.entry(f.clone()).or_insert_with(|| target.span); + all_targets + .entry(nu_path::expand_path_with(f, ¤tdir_path)) + .or_insert_with(|| target.span); } Err(e) => { return Err(ShellError::GenericError( diff --git a/crates/nu-command/tests/commands/rm.rs b/crates/nu-command/tests/commands/rm.rs index 6a0ce20128..90e697c313 100644 --- a/crates/nu-command/tests/commands/rm.rs +++ b/crates/nu-command/tests/commands/rm.rs @@ -375,6 +375,21 @@ fn removes_symlink() { }); } +#[test] +fn removes_file_after_cd() { + Playground::setup("rm_after_cd", |dirs, sandbox| { + sandbox.with_files(vec![EmptyFile("delete.txt")]); + + nu!( + cwd: dirs.root(), + "let file = 'delete.txt'; cd rm_after_cd; rm $file", + ); + + let path = dirs.test().join("delete.txt"); + assert!(!path.exists()); + }) +} + struct Cleanup<'a> { dir_to_clean: &'a Path, }