因此,我为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中调用它时如何使其正常运行?
答案 0 :(得分:3)
通过Command
生成流程使用系统的本机功能来创建流程。这是一个低级功能,与您习惯的Shell /终端无关。特别是,您的Shell(例如在您的终端内部运行的bash
或zsh
)提供了更多功能。例如,通过|
进行管道传递就是这样的功能。 Command
不支持这些功能,因为底层系统的API不支持。
幸运的是,低级界面提供了实现很多东西的其他方法。例如,管道通常只是重定向标准输入和输出。您可以使用Command::{stdin, stdout, sterr}
来做到这一点。有关更多信息,请参见this part of the documentation。
有一些非常相似的问题,它们的相似度不足以使沃伦特将其作为欺骗手段予以关闭: