feat: add the dirname command
This commit is contained in:
parent
51659bde16
commit
9b73d54905
3 changed files with 38 additions and 0 deletions
36
coreutils/src/commands/dirname.rs
Normal file
36
coreutils/src/commands/dirname.rs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
use std::path::Path;
|
||||
|
||||
use boxutils::{args::ArgParser, commands::Command};
|
||||
|
||||
pub struct Dirname;
|
||||
|
||||
impl Command for Dirname {
|
||||
fn execute(&self) {
|
||||
let args = ArgParser::builder()
|
||||
.add_flag("--help")
|
||||
.parse_args("dirname");
|
||||
|
||||
if args.get_normal_args().len() != 1 || args.get_flag("--help") {
|
||||
println!("Usage: dirname FILENAME");
|
||||
return;
|
||||
}
|
||||
|
||||
// note(teesh): we have already checked for argnums, so we're fine :D
|
||||
let normal_args = args.get_normal_args();
|
||||
let file = normal_args.get(0).unwrap();
|
||||
let path = Path::new(file);
|
||||
|
||||
if let Some(parent) = path.parent() {
|
||||
let mut to_print = format!("{}", parent.display());
|
||||
|
||||
// note(teesh): this is stupid, but thats how the box busies
|
||||
if to_print == "" {
|
||||
to_print = ".".into();
|
||||
}
|
||||
|
||||
println!("{}", to_print);
|
||||
} else {
|
||||
println!("dirname: could not get parent")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -25,3 +25,4 @@ command!(base32::Base32);
|
|||
command!(seq::Seq);
|
||||
command!(env::Env);
|
||||
command!(ln::Ln);
|
||||
command!(dirname::Dirname);
|
||||
|
|
@ -35,6 +35,7 @@ pub fn get_registry() -> CommandRegistry {
|
|||
"seq" => coreutils::commands::Seq,
|
||||
"env" => coreutils::commands::Env,
|
||||
"ln" => coreutils::commands::Ln,
|
||||
"dirname" => coreutils::commands::Dirname,
|
||||
"box" => Boxcmd
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue