diff --git a/crates/nu-command/src/path/type.rs b/crates/nu-command/src/path/type.rs index 6061aee604..665ae82967 100644 --- a/crates/nu-command/src/path/type.rs +++ b/crates/nu-command/src/path/type.rs @@ -1,5 +1,6 @@ use std::path::Path; +use nu_path::expand_tilde; use nu_protocol::ast::Call; use nu_protocol::engine::{EngineState, Stack}; use nu_protocol::{ @@ -78,7 +79,12 @@ If nothing is found, an empty string will be returned."# } fn r#type(path: &Path, span: Span, _: &Arguments) -> Value { - let meta = std::fs::symlink_metadata(path); + let meta = if path.starts_with("~") { + let p = expand_tilde(path); + std::fs::symlink_metadata(p) + } else { + std::fs::symlink_metadata(path) + }; Value::string( match &meta { diff --git a/crates/nu-command/tests/commands/path/type_.rs b/crates/nu-command/tests/commands/path/type_.rs index 040c77c987..71a86b3847 100644 --- a/crates/nu-command/tests/commands/path/type_.rs +++ b/crates/nu-command/tests/commands/path/type_.rs @@ -50,5 +50,14 @@ fn returns_type_of_existing_directory() { )); assert_eq!(actual.out, "file"); + + let actual = nu!(pipeline( + r#" + echo "~" + | path type + "# + )); + + assert_eq!(actual.out, "dir"); }) }