鼓掌捕获所有剩余的参数在一个字段在派生API?



我使用的是clap v3.1.18,代码如下。

#[derive(Parser, Debug)]
#[clap(author, version, about = ABOUT_TEXT, long_about = Some(ABOUT_TEXT))]
struct Args {

/// The root folder on local filesystem to scan
#[clap(short, long, default_value_t = utils::get_current_dir())]
folder: String,
/// Max number of recursive folders to scan
#[clap(short, long, default_value_t = 5)]
depth: u8,
/// Regular expression to include files. Only files whose name matches the specified regexp will be listed. E.g. to only list *.dll and *.exe files, you can specify `((\.dll)$)|((\.exe)$)`
#[clap(short, long, default_value(".+"))]
include: String,
/// Regular expression to include files. Regular expression to exclude files and directories. Files or directories whose name matches this regexp will be skipped
#[clap(short, long, default_value("(^~)|(^\.)|((\.tmp)$)|((\.log)$)"))]
exclude: String,
/// Command line to start child process
#[clap(multiple_occurrences=true, use_delimiter=false)]
command: String,
}
let args = Args::parse();

最后一个command,我想在命令行中获得所有剩余的部分,包括空白。但是当前的代码不能工作,并且以第一个空格结束。

我想我应该设置.setting(AppSettings::TrailingVarArg),但不要在派生API中找到这样做的方法。请问怎么才能做到呢?


感谢@MeetTitan,这是我的代码最终工作

#[derive(Parser, Debug)]
#[clap(author, version, about = ABOUT_TEXT, long_about = Some(ABOUT_TEXT), trailing_var_arg=true)]
struct Args {

/// The root folder on local filesystem to scan
#[clap(short, long, default_value_t = utils::get_current_dir())]
folder: String,
/// Max number of recursive folders to scan
#[clap(short, long, default_value_t = 5)]
depth: u8,
/// Regular expression to include files. Only files whose name matches the specified regexp will be listed. E.g. to only list *.dll and *.exe files, you can specify `((\.dll)$)|((\.exe)$)`
#[clap(short, long, default_value(".+"))]
include: String,
/// Regular expression to include files. Regular expression to exclude files and directories. Files or directories whose name matches this regexp will be skipped
#[clap(short, long, default_value("(^~)|(^\.)|((\.tmp)$)|((\.log)$)"))]
exclude: String,
/// Command line to start child process
#[clap(long, multiple_values=true, allow_hyphen_values=true)]
run: Vec<String>,
}

派生引用状态:

任何Command方法也可以用作属性,语法参见术语。

#[clap(arg_required_else_help(true))]会转化为cmd.arg_required_else_help(true)

使用这个,我们可以得到.setting(AppSettings::TrailingVarArg),(更准确地说是App::trailing_var_arg()),如下所示:

#[clap(... trailing_var_arg=true)]
struct Args { ... }

最新更新