假设我正在编写一个名为foo
的命令行程序,使用clap作为参数解析器:
#[derive(Debug, Parser)]
struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Debug, Subcommand)]
enum Commands {
Run {
executable: OsString,
args: Vec<OsString>,
},
}
它应该做的事情之一是运行其他命令行程序,例如,要告诉foo
运行可执行文件bar
,用户可以运行:
foo run bar
如果用户尝试传递bar
的标志:
foo run bar --baz
...我希望将它们捕获为原始参数,以便可以将它们直接传递给bar
,如下所示:
Cli {
command: Run {
executable: "bar",
args: [
"--baz",
],
},
}
但是,clap并没有将其作为原始参数捕获,而是将其解析为一个标志,供foo
处理。
有没有办法让clap忽略它在某个点之后看到的任何标志?
我知道用户可以告诉clap停止将后续参数解析为标记,如下所示:
foo run -- bar --baz
如果可能的话,我希望避免这种解决方法,因为它比必要的更冗长,而且从用户的Angular 来看,它有点违反直觉。通常,您放入--
是为了避免将args作为标志处理,而不是相反。
1条答案
按热度按时间pftdvrlh1#
尝试构建器界面www.example.com中的trailing_var_arg方法https://docs.rs/clap/latest/clap/builder/struct.Arg.html#method.trailing_var_arg