Command :: new()。args()不处理数组中的多个参数

时间:2019-01-31 00:31:05

标签: rust

我是一位试图学习Rust的JavaScript程序员。我觉得自己已经做好了充分的准备,可以尝试实际制作东西。这些年来,我已经创建了一些shell脚本,所以我想我可能会开始在Rust中重新创建其中的一些。基本上,我需要能够调用其他应用程序并将其传递给它们。到目前为止,我已经提出了以下建议:

https://github.com/socketwiz/up2date/blob/master/src/main.rs

该程序的核心是:

let output = Command::new(app.command)
    .args(app.args)
    .output();

我本可以很容易地使用各种命令和参数对其中的几个进行编码,但我认为将其拆分为一个函数,可以将一系列命令和参数传递给函数,并使其顺利通过,这样会更加干净。排列并执行命令。在大多数情况下,它的工作与预期的一样,除了L22:

.args(app.args)

app.args是一个数组,但似乎仅在处理第一个索引-l-b似乎被完全忽略了,我不确定为什么。我在println之前有一个Command,它会打印出一个数组:

println!("{:?}", app.args);

# output
# ["-l", "-b"]

Rust最难的部分是类型系统。我在这里读到了一些东西:

https://doc.rust-lang.org/1.9.0/book/lifetimes.html

提到了所谓的“与借阅检查器打架”,我可以将其与之联系:

  

Rust的许多新用户都遇到了我们喜欢称之为“与借阅检查器打架”的事情,Rust编译器拒绝编译作者认为有效的程序。经常发生这种情况是因为程序员关于所有权应如何运作的思维模型与Rust实施的实际规则不符。

所以我觉得我可能没有正确的类型,或者我对所有权概念或类似的东西有些误解。任何指导将不胜感激。

1 个答案:

答案 0 :(得分:-2)

我不了解您遇到的问题,the output in the playground seems to be what I would expect以及您要寻找的是什么(我将-b替换为-h,因为这对我来说更容易注意更改):

["-l", "-h"]
total 152K
-rw-r--r-- 1 root root 118K Jan 30 03:15 Cargo.lock
-rw-rw-r-- 1 root root 4.8K Jan 31 00:44 Cargo.toml
-rw-rw-r-- 1 root root  16K Jan 30 03:08 crate-information.json
drwxr-xr-x 1 root root 4.0K Jan 31 00:44 src
drwxr-xr-x 1 root root 4.0K Jan 30 03:20 target

是不是您在-b不是有效的ls标志的环境中?