无法打印过程::命令,因为“借入的值寿命不足”

时间:2018-09-30 10:16:58

标签: rust

我想要一种打印带有参数的命令的方法。在我的实际情况下,这些参数已生成,我想查看我们将要运行的命令。

我正在尝试这样做:

fn main() {
    use std::process::Command;

    let x = Command::new("sh").arg("2");

    let y = x.output();

    println!("status: {:#?}", x);
    println!("status: {:#?}", y);
}
error[E0597]: borrowed value does not live long enough
  --> src/main.rs:4:13
   |
4  |     let x = Command::new("sh").arg("2");
   |             ^^^^^^^^^^^^^^^^^^         - temporary value dropped here while still borrowed
   |             |
   |             temporary value does not live long enough
...
10 | }
   | - temporary value needs to live until here
   |
   = note: consider using a `let` binding to increase its lifetime

如果不添加上面的.arg("2"),我可以使它正常工作,但这对我的用例没有帮助。

关于stackoverflow的所有其他示例似乎都没有帮助我解决这个问题。

1 个答案:

答案 0 :(得分:3)

Command::arg通过可变引用接受self,因此您需要在调用Command之前将Command::new返回的arg存储在变量中,否则{ {1}}将在语句末尾删除。 (理论上,编译器可以像在其他情况下一样在此处使用隐藏变量,但是从Rust 1.29开始,它不会使用它。)

Command