Как запустить команду, которая может принимать неопределенное количество аргументов env? - PullRequest
1 голос
/ 04 июля 2019
fn main() {
    let args: Vec<String> = env::args().collect();
    Command::new("sudo")
        .arg("apt")
        .arg(&args[0].to_lowercase())
        .arg(&args[EVERY OTHER ARGUMENT THE USER INPUTTED]);
}

Как вы видите в коде, я хочу, чтобы каждый аргумент, введенный пользователем (после 1-го аргумента), запускался, но я понятия не имею, как это реализовать.

Ответы [ 2 ]

10 голосов
/ 04 июля 2019

Вместо того, чтобы собирать итератор env::args() в вектор, а затем изменять вектор, вы можете напрямую использовать исходный итератор:

let mut args = env::args();
if let Some(first_arg) = args.next() {
    Command::new("sudo")
        .arg("apt")
        .arg(first_arg.to_lowercase())
        .args(args);
}
1 голос
/ 04 июля 2019

Вы можете удалить первый элемент из списка аргументов и затем передать его аргументам в виде полной ссылки на вектор, как показано ниже:

let mut args: Vec<String> = env::args().collect();

if !args.is_empty() {
    let first_arg = args.remove(0);
    Command::new("sudo")
        .arg("apt")
        .arg(&first_arg.to_lowercase())
        .args(&args);
}

Детская площадка

...