为什么该命令不能正常运行?

时间:2019-09-04 01:01:28

标签: rust

因此,我为APT开发了一个更好的命令行前端,并在下面的代码运行时进行了最后的润色。

Command::new("unbuffer")
    .arg("apt")
    .arg("list")
    .arg("|")
    .arg("less")
    .arg("-r")
    .status()
    .expect("Something went wrong.");

它吐出来了:

E: Command line option 'r' [from -r] is not understood in combination with the other options.

但是当我只是在终端上手动运行unbuffer apt list | less -r时,它可以完美运行。在Rust中调用它时如何使其正常运行?

1 个答案:

答案 0 :(得分:3)

通过Command生成流程使用系统的本机功能来创建流程。这是一个低级功能,与您习惯的Shell /终端无关。特别是,您的Shell(例如在您的终端内部运行的bashzsh)提供了更多功能。例如,通过|进行管道传递就是这样的功能。 Command不支持这些功能,因为底层系统的API不支持。

幸运的是,低级界面提供了实现很多东西的其他方法。例如,管道通常只是重定向标准输入和输出。您可以使用Command::{stdin, stdout, sterr}来做到这一点。有关更多信息,请参见this part of the documentation

有一些非常相似的问题,它们的相似度不足以使沃伦特将其作为欺骗手段予以关闭: