Rust-无法运行复杂的终端命令

时间:2019-09-28 21:55:33

标签: rust

我正在尝试使用rust运行一个较长的命令:

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错误:语法或用法错误_

对于在这里做错的任何事情,我将非常感谢。我已经检查了docs中的Command

1 个答案:

答案 0 :(得分:4)

从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");