我试图理解当使用bash -c
表达式运行命令时,为什么没有得到Err()
结果。
以下是一个示例和输出。我期望out2
和out3
都会是Err()
,但实际上out3
是Ok()
,并带有失败的状态信息。
我正在使用bash -c
从给定的字符串执行命令,它很容易实现。
使用bash -c
语法能否获得Err()
结果?
#![allow(unused)]
use std::process::{Command, Output};
fn main() {
let out1 = Command::new("bash").arg("-c").arg("ls").output();
println!("out1: {:?}", out1);
let out2 = Command::new("wrongcommand").arg("-c").arg("ls").output();
println!("out2: {:?}", out2);
let out3 = Command::new("bash").arg("-c").arg("wrongcommand").output();
println!("out3: {:?}", out3);
}
输出:
out1: Ok(Output { status: ExitStatus(ExitStatus(0)), stdout: "Cargo.lock\nCargo.toml\ncrate-information.json\nsrc\ntarget\n", stderr: "" })
out2: Err(Os { code: 2, kind: NotFound, message: "No such file or directory" })
out3: Ok(Output { status: ExitStatus(ExitStatus(32512)), stdout: "", stderr: "bash: wrongcommand: command not found\n" })
我尝试了命令行并执行了以下操作:
$ bash -c wrongcommand
并且
$ wrongcommand
两者返回相同的退出代码(127)。所以我预计命令的失败方式是一样的。