Rust - Не удается запустить сложную терминальную команду - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь запустить несколько длинную команду с ржавчиной:

rsync -avL --progress -e 'ssh -i ~/path/to/mypem.pem' ../directory/src/file.js user@computer:~/data/school

Я пытался сделать это так:

use std::process::Command;
let output = Command::new("rsync").args(&["-avL", "--progress", "-e", "'ssh", "-i", "~/path/to/mypem.pem'", "../directory/src/file.js", "user@computer:~/data/school"]).output().expect("BAD");

if !output.status.success() {
    let s = String::from_utf8_lossy(&output.stderr);
    print!("rustc failed and stderr was:\n{}", s);
}

println!("{}", String::from_utf8_lossy(&output.stdout));

Это не похоже на работувсе.Это дает мне эту ошибку:

Отсутствует трейлинг- 'в команде удаленной оболочки.

Ошибка rsync: синтаксис или ошибка использования_

Я бы очень признателен за любую помощь в том, что я делаю здесь неправильно.Я проверил документы для команды

1 Ответ

4 голосов
/ 29 сентября 2019

С точки зрения команды rsync этот бит:

ssh -i ~/path/to/mypem.pem

является одним единственным аргументом, поэтому не следует разбивать его на несколько аргументов.

Попробуйте это:

let output = Command::new("rsync").args(&["-avL", "--progress", "-e", "ssh -i ~/path/to/mypem.pem", "../directory/src/file.js", "user@computer:~/data/school"]).output().expect("BAD");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...