我是 Rust 的新手,我一直在写一些练习应用程序。我正在尝试使用 Clap 接受命令行参数。下面的代码接受一个字符串和一个数字并将它们打印出来,如下所示:
$ cargo run "this is a test" -n11
this is a test
11
这很好用,但我希望能够像这样通过管道输入代替字符串:
$ echo "this is a test" | cargo run -- -n11
this is a test
11
尝试这样做会产生:
error: The following required arguments were not provided:
<INPUT>
USAGE:
clap_sample --num <num> <INPUT>
For more information try --help
我可以像这样使用 xargs 解决这个问题:
$ echo "this is a test" | xargs -d '\n' cargo run -- -n11
有没有更好的方法来做到这一点,这样我就可以在仍然使用 -n 选项的同时接受管道中的字符串?提前致谢。
use clap::{Arg, App};
fn main() {
let matches = App::new("Clap Sample")
.arg(Arg::new("INPUT")
.required(true)
.index(1))
.arg(Arg::new("num")
.short('n')
.long("num")
.takes_value(true))
.get_matches();
let usr_string = matches.value_of("INPUT").unwrap();
let key: u8 = matches.value_of("num").unwrap()
.parse()
.expect("NaN :(");
println!("{}", usr_string);
println!("{}", key);
}
额外的问题: 如果我使用 xargs 管道输入字符串,我可以在字符串中添加换行符(分隔符设置为 \0),它们会反映在输出中。如果我在没有 echo 和 xargs 的情况下直接传递它,则输出中会显示文字 '\n'。有没有办法在直接运行时表示换行符?