Как я могу передать все аргументы командной строки через Clap другой программе? - PullRequest
0 голосов
/ 15 января 2019

У меня есть программа foo, которая использует Clap для обработки разбора аргументов команды. foo вызывает другую программу, bar. Недавно я решил, что пользователи foo должны иметь возможность передавать аргументы bar, если им нравится. Я добавил команду bar в хлопок:

let matches = App::new("Foo")
    .arg(Arg::with_name("file").value_name("FILE").required(true))
    .arg(
        Arg::with_name("bar")
            .value_name("[BAR_OPTIONS]")
            .short("b")
            .long("bar")
            .multiple(true)
            .help("Invoke bar with these options"),
    )
    .get_matches();

Когда я пытаюсь передать команду "-baz=3" на bar примерно так:

./foo -b -baz=3 file.txt

или

./foo -b "-baz=3" file.txt

clap возвращает эту ошибку:

error: Found argument '-b' which wasn't expected, or isn't valid in this context

Как мне туннелировать команды через Clap?

1 Ответ

0 голосов
/ 15 января 2019

Если значение аргумента bar само может начинаться с дефиса, то вам нужно установить параметр allow_hyphen_values:

let _matches = App::new("Foo")
    .arg(Arg::with_name("file").value_name("FILE").required(true))
    .arg(
        Arg::with_name("bar")
            .value_name("[BAR_OPTIONS]")
            .allow_hyphen_values(true)
            .short("b")
            .long("bar")
            .multiple(true)
            .help("Invoke bar with these options"),
    )
    .get_matches();
...