执行一系列命令时“cd”无效

xuk*_*uka 2 cmd cd rust

我想制作一个类似 CLI 的小型项目,可以在其中执行一系列命令。所以,我写了这段代码:

let commands = ["cd C:\\Users\\MegaMind\\Documents\\dynamodb_local_latest","dir","echo rust"];
for ccc in &commands {
    let rc = Command::new("cmd")
        .arg("/C")
        .arg(ccc)
        .output()
        .expect("there was an error");

    io::stdout().write_all(&rc.stdout).unwrap();
    // io::stdout().write_all(&rc.stderr).unwrap();
}
Run Code Online (Sandbox Code Playgroud)

看起来它dir在源代码的文件夹中运行命令,而不是在C:\\Users\\MegaMind\\Documents\\dynamodb_local_latest. 我怎样才能使其cd生效?

Sha*_*ger 5

工作目录适用于每个进程。每个Command都是一个单独的过程。该命令更改该进程的cd工作目录,然后该进程退出并且该目录更改的记录消失。然后您启动一个新进程(正在运行的进程),它仍然使用原始工作目录。dir

如果你想为任何给定的子命令设置工作目录,只需在设置时使用该current_dir方法,或者(取决于你的需求)你可能想要更改 Rust 进程的工作目录(当子进程启动时,该目录将被子进程继承)不被覆盖)。